moxy-derive 0.0.4

derive macros for moxy crate
Documentation
mod enums;
mod structs;

pub use enums::*;
pub use structs::*;

#[derive(Clone)]
pub enum Params {
    Struct(structs::StructParams),
    Enum(enums::EnumParams),
}

impl Params {
    pub fn as_struct(&self) -> Option<&structs::StructParams> {
        match self {
            Self::Struct(v) => Some(v),
            _ => None,
        }
    }

    pub fn as_enum(&self) -> Option<&enums::EnumParams> {
        match self {
            Self::Enum(v) => Some(v),
            _ => None,
        }
    }
}

impl From<structs::StructParams> for Params {
    fn from(value: structs::StructParams) -> Self {
        Self::Struct(value)
    }
}

impl From<enums::EnumParams> for Params {
    fn from(value: enums::EnumParams) -> Self {
        Self::Enum(value)
    }
}

impl syn::parse::Parse for Params {
    fn parse(tokens: syn::parse::ParseStream) -> syn::Result<Self> {
        let input = syn::DeriveInput::parse(tokens)?;

        match input.data.clone() {
            syn::Data::Struct(data) => Ok(structs::StructParams { input, data }.into()),
            syn::Data::Enum(data) => Ok(enums::EnumParams { input, data }.into()),
            _ => Err(syn::Error::new_spanned(&input, "unions are not supported")),
        }
    }
}