1 unstable release
Uses old Rust 2015
0.4.0 | Oct 28, 2017 |
---|
#4 in #futures-await
149 downloads per month
Used in 3 crates
21KB
528 lines
futures-await-quote
This crate is a temporary fork of dtolnay/quote. The quote
repository
isn't ready for publication yet but we'd like to publish the futures-await
crate. This is a temporary fork that will only be maintained for the
futures-await
crate and it will be unmaintained as soon as quote
is
published upstream.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
lib.rs
:
Quasi-quoting without a Syntex dependency, intended for use with Macros 1.1.
[dependencies]
quote = "0.3"
#[macro_use]
extern crate quote;
Interpolation is done with #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>,
}
};
Repetition is done using #(...)*
or #(...),*
very similar to macro_rules!
:
#(#var)*
- no separators#(#var),*
- the character before the asterisk is used as a separator#( struct #var; )*
- the repetition can contain other things#( #k => println!("{}", #v), )*
- even multiple interpolations
The return type of quote!
is quote::Tokens
. Tokens can be interpolated into
other quotes:
let t = quote! { /* ... */ };
return quote! { /* ... */ #t /* ... */ };
Call to_string()
or as_str()
on a Tokens to get a String
or &str
of Rust
code.
The quote!
macro relies on deep recursion so some large invocations may fail
with "recursion limit reached" when you compile. If it fails, bump up the
recursion limit by adding #![recursion_limit = "128"]
to your crate. An even
higher limit may be necessary for especially large invocations.
Dependencies
~230KB