Initial commit
This commit is contained in:
@@ -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
|
||||
@@ -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()
|
||||
// }
|
||||
Reference in New Issue
Block a user