![crates-badge] ![docs-badge] ![license-badge] ![rustc-badge]
A procedural macro helper for easily writing derives macros for enums.
Add this to your Cargo.toml
:
toml
[dependencies]
derive_utils = "0.11"
The current 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 use deriveutils::quickderive; use proc_macro::TokenStream;
pub fn deriveiterator(input: TokenStream) -> TokenStream {
quickderive! {
input,
// trait path
std::iter::Iterator,
// trait definition
trait Iterator {
type Item;
fn next(&mut self) -> Option
pub fn deriveexactsizeiterator(input: TokenStream) -> TokenStream {
quickderive! {
input,
// trait path
std::iter::ExactSizeIterator,
// super trait's associated types
pub fn derivefuture(input: TokenStream) -> TokenStream {
quickderive! {
input,
// trait path
std::future::Future,
// trait definition
trait Future {
type Output;
fn poll(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll
When deriving for enum like the following:
```rust
enum Enum { A(A), B(B), } ```
Code like this will be generated:
```rust enum Enum { A(A), B(B), }
impl std::iter::Iterator for Enum
where
A: std::iter::Iterator,
B: std::iter::Iterator
impl std::iter::ExactSizeIterator for Enum
where
A: std::iter::ExactSizeIterator,
B: std::iter::ExactSizeIterator
impl std::future::Future for Enum where A: std::future::Future, B: std::future::Future
fn poll(
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Self::Output> {
unsafe {
match self.get_unchecked_mut() {
Enum::A(x) => std::pin::Pin::new_unchecked(x).poll(cx),
Enum::B(x) => std::pin::Pin::new_unchecked(x).poll(cx),
}
}
}
} ```
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.