derive_to_usize/
lib.rs

1//! Derive for From and Into usize
2//! ```
3//! use derive_into::ToUsize;
4//! #[derive(ToUsize)]
5//! enum Foo {
6//!    Bar,
7//!    E
8//! }
9//! assert_eq!(0_usize, Foo::Bar.into());
10//! assert_eq!(1_usize, Foo::E.into());
11//! ```
12
13
14
15use quote::{quote};
16#[proc_macro_derive(ToUsize)]
17pub fn to_usize(item: proc_macro::TokenStream) -> proc_macro::TokenStream {
18    let input = syn::parse_macro_input!(item as syn::DeriveInput);
19    let name = input.ident;
20    let (impl_gen, ty_gen, ..) = input.generics.split_for_impl();
21    proc_macro::TokenStream::from(quote! {
22        impl #impl_gen std::convert::From<#name #ty_gen> for usize {
23            fn from(value: #name #ty_gen) -> usize {
24                value as usize
25            }
26        }
27    })
28
29}
30