diff options
Diffstat (limited to 'macros/src/syntax/parse')
-rw-r--r-- | macros/src/syntax/parse/init.rs | 4 | ||||
-rw-r--r-- | macros/src/syntax/parse/monotonic.rs | 42 | ||||
-rw-r--r-- | macros/src/syntax/parse/util.rs | 6 |
3 files changed, 5 insertions, 47 deletions
diff --git a/macros/src/syntax/parse/init.rs b/macros/src/syntax/parse/init.rs index 5ec1abaf..61d35391 100644 --- a/macros/src/syntax/parse/init.rs +++ b/macros/src/syntax/parse/init.rs @@ -23,7 +23,7 @@ impl Init { if valid_signature { if let Ok((user_shared_struct, user_local_struct)) = - util::type_is_init_return(&item.sig.output, &name) + util::type_is_init_return(&item.sig.output) { if let Some(context) = util::parse_inputs(item.sig.inputs, &name) { return Ok(Init { @@ -42,7 +42,7 @@ impl Init { Err(parse::Error::new( span, &format!( - "the `#[init]` function must have signature `fn({}::Context) -> (Shared resources struct, Local resources struct, {0}::Monotonics)`", + "the `#[init]` function must have signature `fn({}::Context) -> (Shared resources struct, Local resources struct)`", name ), )) diff --git a/macros/src/syntax/parse/monotonic.rs b/macros/src/syntax/parse/monotonic.rs deleted file mode 100644 index 05832339..00000000 --- a/macros/src/syntax/parse/monotonic.rs +++ /dev/null @@ -1,42 +0,0 @@ -use proc_macro2::Span; -use syn::Attribute; -use syn::{parse, spanned::Spanned, ItemType, Visibility}; - -use crate::syntax::parse::util::FilterAttrs; -use crate::syntax::{ - ast::{Monotonic, MonotonicArgs}, - parse::util, -}; - -impl MonotonicArgs { - pub(crate) fn parse(attr: Attribute) -> parse::Result<Self> { - crate::syntax::parse::monotonic_args(attr.path, attr.tokens) - } -} - -impl Monotonic { - pub(crate) fn parse(args: MonotonicArgs, item: &ItemType, span: Span) -> parse::Result<Self> { - if item.vis != Visibility::Inherited { - return Err(parse::Error::new( - span, - "this field must have inherited / private visibility", - )); - } - - let FilterAttrs { cfgs, attrs, .. } = util::filter_attributes(item.attrs.clone()); - - if !attrs.is_empty() { - return Err(parse::Error::new( - attrs[0].path.span(), - "Monotonic does not support attributes other than `#[cfg]`", - )); - } - - Ok(Monotonic { - cfgs, - ident: item.ident.clone(), - ty: item.ty.clone(), - args, - }) - } -} diff --git a/macros/src/syntax/parse/util.rs b/macros/src/syntax/parse/util.rs index 119129c0..28c3eac6 100644 --- a/macros/src/syntax/parse/util.rs +++ b/macros/src/syntax/parse/util.rs @@ -277,18 +277,18 @@ fn extract_init_resource_name_ident(ty: Type) -> Result<Ident, ()> { } /// Checks Init's return type, return the user provided types for analysis -pub fn type_is_init_return(ty: &ReturnType, name: &str) -> Result<(Ident, Ident), ()> { +pub fn type_is_init_return(ty: &ReturnType) -> Result<(Ident, Ident), ()> { match ty { ReturnType::Default => Err(()), ReturnType::Type(_, ty) => match &**ty { Type::Tuple(t) => { // return should be: - // fn -> (User's #[shared] struct, User's #[local] struct, {name}::Monotonics) + // fn -> (User's #[shared] struct, User's #[local] struct) // // We check the length and the last one here, analysis checks that the user // provided structs are correct. - if t.elems.len() == 3 && type_is_path(&t.elems[2], &[name, "Monotonics"]) { + if t.elems.len() == 2 { return Ok(( extract_init_resource_name_ident(t.elems[0].clone())?, extract_init_resource_name_ident(t.elems[1].clone())?, |