[−][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 */ }