Skip to content

ycysdf/variant_enum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

variant_enum

License Crates.io Docs

Example

use variant_enum::typed_variant;

#[typed_variant(derive(Debug))]
#[derive(derive_more::From)]
pub enum Msg {
    #[inner(derive(Clone))]
    A {
        pub a: u32,
        b: f32,
        c: usize,
        d: String,
    },
    B {
        foo: String,
    },
    C {
        bar: bool,
    },
}

generated:

#[derive(Debug)]
#[derive(derive_more::From)]
pub enum Msg {
    A(A),
    B(B),
    C(C),
}
#[derive(Clone)]
#[derive(Debug)]
pub struct A {
    pub a: u32,
    b: f32,
    c: usize,
    d: String,
}
#[derive(Debug)]
pub struct B {
    foo: String,
}
#[derive(Debug)]
pub struct C {
    bar: bool,
}
impl TryFrom<Msg> for A {
    type Error = Msg;
    fn try_from(value: Msg) -> Result<Self, Self::Error> { if let Msg::A(m) = value { Ok(m) } else { Err(value) } }
}
impl TryFrom<Msg> for B {
    type Error = Msg;
    fn try_from(value: Msg) -> Result<Self, Self::Error> { if let Msg::B(m) = value { Ok(m) } else { Err(value) } }
}
impl TryFrom<Msg> for C {
    type Error = Msg;
    fn try_from(value: Msg) -> Result<Self, Self::Error> { if let Msg::C(m) = value { Ok(m) } else { Err(value) } }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages