3 releases
0.1.2 | Apr 25, 2020 |
---|---|
0.1.1 | Apr 25, 2020 |
0.1.0 | Apr 25, 2020 |
#2145 in Procedural macros
9KB
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);
Dependencies
~1.5MB
~37K SLoC