digenum

Crates.iodigenum
lib.rsdigenum
version0.1.1
sourcesrc
created_at2022-11-19 22:30:23.942354
updated_at2022-11-19 22:43:17.655197
descriptionAn enum variant extractor
homepage
repositoryhttps://github.com/Defmc/digenum
max_upload_size
id718736
size5,247
Defmc (Defmc)

documentation

README

An simple enum variant extractor

Can extract a (mutable) reference or turn into a tuple from fields. When variant is different than the expected, return None.

Example

use digenum::DigEnum;
use std::io::Read;

#[derive(DigEnum)]
enum Login<T: Read> {
    Local,
    Stream(T)
    Token([u8; 64]),
    UserAndPasswd(String, String),
}

Maps to:

Variant Reference Mutable Reference Owned
Local None None None
Stream(T) as_Stream -> Option<&T> as_mut_Stream -> Option<&mut T> into_Stream -> Option<T>
Token([u8; 64]) as_Token -> Option<&[u8; 64]> as_mut_Token -> Option<&mut [u8; 64]> into_Token -> Option<[u8; 64]>
UserAndPasswd(String, String) as_UserAndPasswd -> Option<(&String, &String)> as_mut_UserAndPasswd -> Option<(&mut String, &mut String)> into_UserAndPasswd -> Option<(String, String)>

"Why do not turn snake_case?"

Consider this example:

use digenum::DigEnum;

#[derive(DigEnum)]
enum Foo {
    FOO,
    foo,
    Foo
}

How should I handle it?

Works on

  • Empty enums
  • Empty variants
  • Single-fielded variants
  • Multiple-fielded variants
  • Different-case variants (like Foo::FOO and Foo::foo)
  • Generic variants
  • Unit variants
  • Struct-like variants
Commit count: 29

cargo fmt