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

futures-await-quote

Temporary fork of the quote crate for futures-await

1 unstable release

Uses old Rust 2015

0.4.0 Oct 28, 2017

#4 in #futures-await

Download history 48/week @ 2024-07-22 39/week @ 2024-07-29 39/week @ 2024-08-05 56/week @ 2024-08-12 36/week @ 2024-08-19 31/week @ 2024-08-26 37/week @ 2024-09-02 41/week @ 2024-09-09 35/week @ 2024-09-16 62/week @ 2024-09-23 39/week @ 2024-09-30 34/week @ 2024-10-14 26/week @ 2024-10-21 42/week @ 2024-10-28 47/week @ 2024-11-04

149 downloads per month
Used in 3 crates

MIT/Apache

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

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