[−][src]Crate count_tys
count_tys!() function-like macro
Returns the count of comma-delimited :ty
s (types) in the given TokenStream
as a constant expression of type usize
Arguments
input
- ATokenStream
in which comma-delimited:ty
s (types) must be counted
Examples
Basic usage
// count_tys!($($ty:ty),*)
More complete example
Cargo.toml
/*
[dependencies]
proc-macro-hack = "0.5"
count-tys = "0.1"
*/
main.rs
extern crate proc_macro_hack; use proc_macro_hack::proc_macro_hack; #[proc_macro_hack] use count_tts::count_tys; // It not necessarily must be a struct, it could be a generic // Read more about macro_rules! here: // <https://doc.rust-lang.org/rust-by-example/macros.html> macro_rules! declare_variadic_struct { ($struct_name:ident, <$($ty:ty),*>) => { struct $struct_name { // fields } impl $struct_name { pub const fn count() -> usize { // count_tys!() can be used in an expression and even // const expression context // unlike macros without proc_macro_hack // note: see issue #54727 // <https://github.com/rust-lang/rust/issues/54727> // for more information. count_tys!($($ty:ty),*) } } }; } // declare_variadic_struct!(VariadicStruct, <usize, usize, usize>); // expands into the following: // // struct VariadicStruct { // // fields // } // // impl VariadicStuct { // pub const fn count() -> usize { // 3usize // } // } declare_variadic_struct!(VariadicStruct, <usize, usize, usize>); assert_eq!(VariadicStruct::count(), 3);
Derive Macros
proc_macro_hack_count_tys | Returns the count of comma-delimited |