Represent the unsafety on foreign module
diff --git a/syntax/file.rs b/syntax/file.rs
index f227900..dfe8e0d 100644
--- a/syntax/file.rs
+++ b/syntax/file.rs
@@ -2,7 +2,7 @@
use quote::quote;
use syn::parse::{Error, Parse, ParseStream, Result};
use syn::{
- braced, token, Attribute, Ident, Item as RustItem, ItemEnum, ItemForeignMod, ItemStruct,
+ braced, token, Abi, Attribute, ForeignItem, Ident, Item as RustItem, ItemEnum, ItemStruct,
ItemUse, Token, Visibility,
};
@@ -25,6 +25,14 @@
Other(RustItem),
}
+pub struct ItemForeignMod {
+ pub attrs: Vec<Attribute>,
+ pub unsafety: Option<Token![unsafe]>,
+ pub abi: Abi,
+ pub brace_token: token::Brace,
+ pub items: Vec<ForeignItem>,
+}
+
impl Parse for Module {
fn parse(input: ParseStream) -> Result<Self> {
let namespace = Namespace::none();
@@ -71,7 +79,13 @@
match item {
RustItem::Struct(item) => Ok(Item::Struct(item)),
RustItem::Enum(item) => Ok(Item::Enum(item)),
- RustItem::ForeignMod(item) => Ok(Item::ForeignMod(item)),
+ RustItem::ForeignMod(item) => Ok(Item::ForeignMod(ItemForeignMod {
+ attrs: item.attrs,
+ unsafety: None,
+ abi: item.abi,
+ brace_token: item.brace_token,
+ items: item.items,
+ })),
RustItem::Use(item) => Ok(Item::Use(item)),
other => Ok(Item::Other(other)),
}
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 117d025..c23ee8f 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -1,5 +1,5 @@
use crate::syntax::discriminant::DiscriminantSet;
-use crate::syntax::file::Item;
+use crate::syntax::file::{Item, ItemForeignMod};
use crate::syntax::report::Errors;
use crate::syntax::Atom::*;
use crate::syntax::{
@@ -12,8 +12,8 @@
use syn::punctuated::Punctuated;
use syn::{
Abi, Attribute, Error, Fields, FnArg, ForeignItem, ForeignItemFn, ForeignItemType,
- GenericArgument, Ident, ItemEnum, ItemForeignMod, ItemStruct, LitStr, Pat, PathArguments,
- Result, ReturnType, Token, Type as RustType, TypeBareFn, TypePath, TypeReference, TypeSlice,
+ GenericArgument, Ident, ItemEnum, ItemStruct, LitStr, Pat, PathArguments, Result, ReturnType,
+ Token, Type as RustType, TypeBareFn, TypePath, TypeReference, TypeSlice,
};
pub mod kw {