Files
macros/02_procedural/demo_macro/src/lib.rs
T
2026-04-15 15:57:36 +02:00

71 lines
1.5 KiB
Rust

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 = <value>
// fn parse(input: ParseStream) -> syn::Result<Self> {
// let ident: syn::Ident = input.parse()?;
// if ident != "answer" {
// return Err(Error::new(ident.span(), "expected 'answer'"));
// }
//
// input.parse::<Token![=]>()?;
//
// 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()
// }