A procedural macro helper for easily writing [custom derives] for enums.
Add this to your Cargo.toml
:
toml
[dependencies]
derive_utils = "0.7"
The current version of derive_utils requires Rust 1.31 or later.
quick_derive!
macro make easy to write proc_macro_derive
like deriving trait to enum so long as all variants are implemented that trait.
```rust extern crate proc_macro;
use deriveutils::quickderive; use proc_macro::TokenStream;
pub fn deriveiterator(input: TokenStream) -> TokenStream {
quickderive! {
input,
// trait
trait Iterator {
type Item;
fn next(&mut self) -> Option
pub fn deriveexactsizeiterator(input: TokenStream) -> TokenStream { quickderive! { input, // super trait's associated types Item, // trait trait ExactSizeIterator: Iterator { fn len(&self) -> usize; } } }
pub fn derivefusediterator(input: TokenStream) -> TokenStream { quick_derive! { input, // super trait's associated types Item, // path (std::iter::FusedIterator), // trait trait FusedIterator: Iterator {}, } } ```
When deriving for enum like the following:
```rust
enum Iter { A(A), B(B), } ```
Code like this will be generated:
```rust enum Iter { A(A), B(B), }
impl Iterator for Iter
where
A: Iterator,
B: Iterator
impl ExactSizeIterator for Iter
where
A: ExactSizeIterator,
B: ExactSizeIterator
impl std::iter::FusedIterator for Iter
where
A: std::iter::FusedIterator,
B: std::iter::FusedIterator
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.