Skip to content

Extends syn expressions and meta structs with unnamed structs and meta list

Notifications You must be signed in to change notification settings

andrewlowndes/syn-unnamed-struct

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

syn_unnamed_struct

Parse and convert structs with no name to tokens. For usage in attribute macro arguments in place of Meta attributes to allow more structured data to be used (nested objects).

Usage in derive macro definition

use syn_unnamed_struct::Meta;

#[proc_macro_derive(CustomMacro, attributes(customMacro))]
pub fn derive(tokens: TokenStream) -> TokenStream {
    let input = parse_macro_input!(tokens);
    
    input.attrs.map(|attr| {
        let obj: Meta = attr.parse().expect("Coult not parse attribute");
        
        //can now interact and extract the properties from the Meta enum
        //...
    });
}

Example macro usage

#[derive(CustomMacro)]
#[customMacro(name="something", other={ entry1: "val1", entry2: "val2" })]
struct MyStruct {
    //...
}

Supported attributes

  • Unnamed structs
#[customMacro({ prop1: 123, prop2: 245 })]
  • Nested unnamed structs
#[customMacro({ prop1: 123, prop2: { prop2a: 123, prop2b: 245 } })]
  • Unnamed struct in Meta value
#[customMacro(prop1=123, prop2={ prop2a: 123, prop2b: 245 })]
  • Unnamed Meta list
#[customMacro(prop1, prop2, (prop3a=123, prop3b=245)))]
  • Nested unnamed Meta lists
#[customMacro(prop1=123, prop2=(prop2a=123, prop2b=245)))]

Notes

  • Cannot use darling since it is entwined with the syn Meta structs

About

Extends syn expressions and meta structs with unnamed structs and meta list

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages