macro_rules! pub_iterator_type {
( #[$($attr:tt)*] $Name:ident [ $($NameParam:tt)* ] = $From:ty ) => { ... };
( #[$($attr:tt)*] $Name:ident [ $($NameParam:tt)* ] = $From:ty where $($w:tt)* ) => { ... };
}Expand description
Abstract behind a tuple struct an iterator. Usefull to privatize implementation details about the implementation of the iterator. The syntax is done to be as if you write a type definition.
First you put the (non optional) doc inside #[doc="..."]. Then
the name of your type with its generic parameter between
[]. After = you put the real type that should be hidden, with
an optional where clause.
ยงExample
// In the crate root module:
#[macro_use] extern crate pub_iterator_type;
// Declare the type
pub_iterator_type! {
#[doc="An iterator that yield infinitelly the default value."]
RepeatDefault[T] = std::iter::Repeat<T> where T: Default + Clone
}
pub fn repeat_default<T: Default + Clone>() -> RepeatDefault<T> {
RepeatDefault(std::iter::repeat(T::default()))
}
let iter = repeat_default::<i32>();
for i in iter.take(100) {
assert_eq!(0, i);
}