Initial commit

This commit is contained in:
2026-04-14 03:44:59 +02:00
commit e92ea08a05
32 changed files with 589 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
[package]
name = "demo_macro"
version = "0.1.0"
edition = "2024"
[dependencies]
proc-macro2 = "1.0.106"
quote = "1.0.45"
syn = "2.0.117"
[lib]
proc-macro = true
+70
View File
@@ -0,0 +1,70 @@
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()
// }