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")),
}
}
}