Rust Darling proc宏属性令牌流错误
我正在为一个结构做一个带有属性的过程宏 我需要一个类型参数,所以我使用了一个属性作为参数结束 我知道Darling可以解析该属性,但是当我解析它时,我得到了一个procmacro/procmacro2错误 鉴于此代码:Rust Darling proc宏属性令牌流错误,rust,rust-cargo,Rust,Rust Cargo,我正在为一个结构做一个带有属性的过程宏 我需要一个类型参数,所以我使用了一个属性作为参数结束 我知道Darling可以解析该属性,但是当我解析它时,我得到了一个procmacro/procmacro2错误 鉴于此代码: extern crate proc_macro; use proc_macro2::TokenStream; use quote::quote; use syn::{self, parse_macro_input, AttributeArgs, DeriveInput}; us
extern crate proc_macro;
use proc_macro2::TokenStream;
use quote::quote;
use syn::{self, parse_macro_input, AttributeArgs, DeriveInput};
use darling::FromMeta;
#[derive(Debug, FromMeta)]
struct MacroArgs {
toUpdateType: String,
}
#[proc_macro_attribute]
pub fn http_update(args: proc_macro::TokenStream, input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let ast = syn::parse(input).unwrap();
let args = parse_macro_input!(args as AttributeArgs);
let args = match MacroArgs::from_list(&args) {
Ok(v) => v,
Err(e) => { return e.write_errors(); } // <- Error here on write errors (see below)
};
impl_http_update_macro(&ast, &args)
}
/*
* U = Implémente UpdatableModel
* M = Implémente Model
*/
fn impl_http_update_macro(ast: &syn::DeriveInput, args: &MacroArgs) -> proc_macro::TokenStream {
let name = &ast.ident;
let gen = quote! {
...
};
gen.into()
}
我有一个错误:
error[E0308]: mismatched types
--> rest_macro_derive/src/lib.rs:68:28
|
68 | Err(e) => { return e.write_errors(); }
| ^^^^^^^^^^^^^^^^ expected struct `proc_macro::TokenStream`, found struct `proc_macro2::TokenStream`
在my Cargo.toml中,我有:
[dependencies]
syn = { version = "1.0.44", features = ["parsing"]}
quote = "1.0"
rest_macro = { version = "0.1.0", path = "../rest_macro" }
actix-web = { version="2", features=["rust-tls"] }
darling = "0.10.2"
proc-macro2 = "1.0.24"
[lib]
proc-macro = true
有一个从proc_macro::TokenStream
到proc_macro2::TokenStream
的过程。您是否尝试过使用Err(e)=>{returne e.write_errors().into();}
。
[dependencies]
syn = { version = "1.0.44", features = ["parsing"]}
quote = "1.0"
rest_macro = { version = "0.1.0", path = "../rest_macro" }
actix-web = { version="2", features=["rust-tls"] }
darling = "0.10.2"
proc-macro2 = "1.0.24"
[lib]
proc-macro = true