use proc_macro::TokenStream; #[proc_macro] pub fn hello_world(_item: TokenStream) -> TokenStream { "println!(\"Hello, World\")".parse().unwrap() } // #[proc_macro] // pub fn make_answer(_item: TokenStream) -> TokenStream { // "fn answer() -> u32 { 42 }".parse().unwrap() // } // use quote::quote; // // #[proc_macro] // pub fn make_answer_quote(_item: TokenStream) -> TokenStream { // let value: u32 = 43; // // quote! { // fn answer_quote() -> u32 { // #value // } // } // .into() // } // use quote::ToTokens; // use syn::{ // Error, LitInt, Token, // parse::{Parse, ParseStream}, // parse_macro_input, // }; // // struct Custom { // value: LitInt, // } // // impl Parse for Custom { // // answer = // fn parse(input: ParseStream) -> syn::Result { // let ident: syn::Ident = input.parse()?; // if ident != "answer" { // return Err(Error::new(ident.span(), "expected 'answer'")); // } // // input.parse::()?; // // let value = input.parse()?; // // Ok(Custom { value }) // } // } // // impl ToTokens for Custom { // fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { // self.value.to_tokens(tokens); // } // } // // #[proc_macro] // pub fn make_answer_custom(input: TokenStream) -> TokenStream { // let custom = parse_macro_input!(input as Custom); // // quote! { // fn answer_custom() -> u32 { // #custom // } // } // .into() // }