Skip to content

Commit 00a8385

Browse files
committed
Data structure for parsed contents of bridge module
1 parent 633f566 commit 00a8385

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

syntax/file.rs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use crate::syntax::namespace::Namespace;
22
use quote::quote;
33
use syn::parse::{Error, Parse, ParseStream, Result};
4-
use syn::{braced, token, Attribute, Ident, Item, Token, Visibility};
4+
use syn::{
5+
braced, token, Attribute, Ident, Item as RustItem, ItemEnum, ItemForeignMod, ItemStruct,
6+
ItemUse, Token, Visibility,
7+
};
58

69
pub struct Module {
710
pub namespace: Namespace,
@@ -14,6 +17,14 @@ pub struct Module {
1417
pub content: Vec<Item>,
1518
}
1619

20+
pub enum Item {
21+
Struct(ItemStruct),
22+
Enum(ItemEnum),
23+
ForeignMod(ItemForeignMod),
24+
Use(ItemUse),
25+
Other(RustItem),
26+
}
27+
1728
impl Parse for Module {
1829
fn parse(input: ParseStream) -> Result<Self> {
1930
let namespace = Namespace::none();
@@ -53,3 +64,16 @@ impl Parse for Module {
5364
})
5465
}
5566
}
67+
68+
impl Parse for Item {
69+
fn parse(input: ParseStream) -> Result<Self> {
70+
let item = input.parse()?;
71+
match item {
72+
RustItem::Struct(item) => Ok(Item::Struct(item)),
73+
RustItem::Enum(item) => Ok(Item::Enum(item)),
74+
RustItem::ForeignMod(item) => Ok(Item::ForeignMod(item)),
75+
RustItem::Use(item) => Ok(Item::Use(item)),
76+
other => Ok(Item::Other(other)),
77+
}
78+
}
79+
}

syntax/parse.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::syntax::discriminant::DiscriminantSet;
2+
use crate::syntax::file::Item;
23
use crate::syntax::report::Errors;
34
use crate::syntax::Atom::*;
45
use crate::syntax::{
@@ -11,7 +12,7 @@ use syn::parse::{ParseStream, Parser};
1112
use syn::punctuated::Punctuated;
1213
use syn::{
1314
Abi, Attribute, Error, Fields, FnArg, ForeignItem, ForeignItemFn, ForeignItemType,
14-
GenericArgument, Ident, Item, ItemEnum, ItemForeignMod, ItemStruct, LitStr, Pat, PathArguments,
15+
GenericArgument, Ident, ItemEnum, ItemForeignMod, ItemStruct, LitStr, Pat, PathArguments,
1516
Result, ReturnType, Token, Type as RustType, TypeBareFn, TypePath, TypeReference, TypeSlice,
1617
};
1718

@@ -33,7 +34,7 @@ pub fn parse_items(cx: &mut Errors, items: Vec<Item>) -> Vec<Api> {
3334
},
3435
Item::ForeignMod(foreign_mod) => parse_foreign_mod(cx, foreign_mod, &mut apis),
3536
Item::Use(item) => cx.error(item, error::USE_NOT_ALLOWED),
36-
_ => cx.error(item, "unsupported item"),
37+
Item::Other(item) => cx.error(item, "unsupported item"),
3738
}
3839
}
3940
apis

0 commit comments

Comments
 (0)