#quote #fork #temporary #futures-await #tokens #dtolnay-quote

futures-await-quote

为futures-await提供的quote crate临时分支

1 个不稳定版本

使用旧的Rust 2015

0.4.0 2017年10月28日

#4#futures-await

Download history 14/week @ 2023-12-03 33/week @ 2023-12-10 41/week @ 2023-12-17 34/week @ 2023-12-24 5/week @ 2023-12-31 27/week @ 2024-01-07 34/week @ 2024-01-14 26/week @ 2024-01-21 9/week @ 2024-01-28 23/week @ 2024-02-04 36/week @ 2024-02-11 53/week @ 2024-02-18 52/week @ 2024-02-25 45/week @ 2024-03-03 55/week @ 2024-03-10 58/week @ 2024-03-17

212 每月下载量
用于 3 crate

MIT/Apache

21KB
528

futures-await-quote

此crate是dtolnay/quote的临时分支。quote存储库尚未准备好发布,但我们希望发布futures-await crate。这是一个仅为futures-await crate维护的临时分支,一旦quote发布到上游,它将不再维护。

许可

以下任一许可下提供

任选其一。


lib.rs:

无需Syntex依赖的准引用,旨在与宏1.1一起使用。

[dependencies]
quote = "0.3"
#[macro_use]
extern crate quote;

使用#var进行插值

let tokens = quote! {
    struct SerializeWith #generics #where_clause {
        value: &'a #field_ty,
        phantom: ::std::marker::PhantomData<#item_ty>,
    }

    impl #generics serde::Serialize for SerializeWith #generics #where_clause {
        fn serialize<S>(&self, s: &mut S) -> Result<(), S::Error>
            where S: serde::Serializer
        {
            #path(self.value, s)
        }
    }

    SerializeWith {
        value: #value,
        phantom: ::std::marker::PhantomData::<#item_ty>,
    }
};

重复使用#(...)*#(...),*实现,与macro_rules!非常相似

  • #(#var)* - 无分隔符
  • #(#var),* - 星号前的字符用作分隔符
  • #( struct var; )* - 重复可以包含其他内容
  • #( #k => println!("{}", #v), )* - 支持多个插值

quote! 的返回类型是 quote::Tokens。标记可以插入到其他引用中

let t = quote! { /* ... */ };
return quote! { /* ... */ #t /* ... */ };

在 Tokens 上调用 to_string()as_str(),可以得到 Rust 代码的 String&str

quote! 宏依赖于深层递归,因此在编译时,一些大型调用可能会因“达到递归限制”而失败。如果失败,请通过将 #![recursion_limit = "128"] 添加到您的 crate 中来提高递归限制。对于特别大的调用,可能需要更高的限制。

依赖项

~220KB