#[proc_macro_derive(ObjectMacro)] pub fn object_macro_derive(input: TokenStream) -> TokenStream { let ItemStruct { ident, fields, attrs, .. } = parse_macro_input!(input); let name = ident.to_string(); quote! { fn this_is_macro_auto() { println!("struct name {}", #name); }...
pubfnmy_proc_macro(ident:TokenStream)->TokenStream{ letnew_func_name=format!("test_{}",ident.to_string()); letconcated_ident=Ident::new(&new_func_name,Span::call_site());// 创建新的ident,函数名 letexpanded=quote!{ // 不能直接这样写trait bound,T: Debug // 会报错,找不到Debug tra...
#[proc_macro_derive(Printable)] pub fn print_info_derive(input: TokenStream) -> TokenStream { let struct_name = to_snake_case(input.ident.to_string().as_str()); let fields = match input.data.clone() { syn::Data::Struct(data) => data.fields, _ => panic!("Only structs are suppo...
#[proc_macro]pub fnmy_proc_macro(ident:TokenStream)->TokenStream{letnew_func_name=format!("test_{}",ident.to_string());letconcated_ident=Ident::new(&new_func_name,Span::call_site());// 创建新的ident,函数名letexpanded=quote!{// 不能直接这样写trait bound,T: Debug// 会报错,找不到...
boolean这个 macro 包含了DataType::Boolean的所有信息——它的逻辑类型是 Boolean,对应的 Array 类型是BoolArray,标量类型是bool。 再看一个例子: /// Association information for `Char` logical type.macro_rules!fwchar{($macro:ident)=>{$macro!{DataType::Char{..},StringArray,String}};}pub(crate)us...
并生成相应的'get_'方法:macro_rules! generate_getter{ ($field:ident) => { fn get_ $field(&self) -> &Self::$field { &self.$field } };} struct Person{ name: String,age: u32,} impl Person{ generate_getter!(name);generaate_getter!(age);} fn main(){ let...
macro_rules!point{($name:ident,$x:expr,$y:expr)=>{struct$name{x:i32,y:i32,}impl$name{fnnew(x:i32,y:i32)->Self{$name{x,y}}fnget_x(&self)->i32{self.x}fnget_y(&self)->i32{self.y}}};}point!(Point2D,10,20);fnmain(){letp=Point2D::new(10,20);println!("x:{},y:...
hello_macro { ( $($tt: tt)* ) => { $($tt)* }; } 就是把所有传入的token全部都原样返回.TokenStream相当于声明宏里的$($tt: tt)*, 一连串的 token(TokenTree) 全部放到了一个stream(其实内部就是个Vec<TokenTree>) 里 pubenumTokenTree{Group(Group),// [...], {...}, (...)Ident(...
#[derive(Getters)]structTest{#[getter(name=get_name)]name:String} 函数式 函数带有#[proc_macro]属性 函数签名为pub fn xxx (proc_macro::TokenStream) -> proc_macro::TokenStream 函数的名称就是使用时名称,如下例子: #[proc_macro]pubfnlazy_static(input: TokenStream)->TokenStream {//...} ...
macro_rules!inc_item { { $x:ident } => { $x.contents +=1; } } 这就意味着常规意义上的参数被移动(moved)或者 & (被引用)的情形没有发生: letmutx = Item { contents:42};// type is not `Copy`// Item is *not* moved, despite the (x) syntax,// but the body of the macro *...