[][src]Function serde_syn::from_stream

pub fn from_stream<'a, T>(
    config: Config,
    tokens: ParseStream<'a>
) -> Result<T, SynError> where
    T: Deserialize<'a>, 

Deserialize the type T from Rust syntax. This will almost always be used from inside a Parse implementation. To deserialize a token stream or string, consider using parser.

For example, to parse attributes of the form

#[text("Hello"), count(10)]
#[count = 50]
#[{ text: "Hello" }]

you could create a procedual macro that uses from_stream:

use proc_macro::TokenStream;
use syn::{parse_macro_input, bracketed, Token};
use syn::parse::{Parse, ParseStream};
use serde_derive::Deserialize;
use serde_syn::{from_stream, config};

#[derive(Deserialize)]
struct MyMacroAttr {
    text: Option<String>,
    #[serde(default)]
    count: usize,
}

impl Parse for MyMacroAttr {
    fn parse(input: ParseStream) -> syn::Result<Self> {
        let pound_token: Token![#] = input.parse()?;
        let content;
        let bracket_token = bracketed!(content in input);
        from_stream(config::RUSTY_META, &content)
    }
}

#[proc_macro]
pub fn my_macro(input: TokenStream) -> TokenStream {
    let attributes = parse_macro_input!(input as MyMacroAttr);

    /* your macro here */
}