Go to file
David Tolnay 1a2f463919
quote!
2016-09-02 22:37:51 -07:00
src quote! 2016-09-02 22:37:51 -07:00
tests quote! 2016-09-02 22:37:51 -07:00
.gitignore quote! 2016-09-02 22:37:51 -07:00
Cargo.toml quote! 2016-09-02 22:37:51 -07:00
LICENSE-APACHE quote! 2016-09-02 22:37:51 -07:00
LICENSE-MIT quote! 2016-09-02 22:37:51 -07:00
README.md quote! 2016-09-02 22:37:51 -07:00

Dead Simple Rust Quasi-Quoting

Quasi-quoting without a Syntex dependency, intended for use with Macros 1.1.

[dependencies]
quote = "0.1"
#[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 in one of three ways, similar to macro_rules! repetitions:

  • #(var)* - no separators
  • #(var),* - the character before the asterisk is used as a separator
  • #(var;)* - the character before the close paren is used as a terminator

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.