use super::Field;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Variant {
pub name: &'static str,
pub discriminant: Option<i64>,
pub kind: VariantKind,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum VariantKind {
Unit,
Tuple {
fields: &'static [Field],
},
Struct {
fields: &'static [Field],
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EnumRepr {
Default,
U8,
U16,
U32,
U64,
USize,
I8,
I16,
I32,
I64,
ISize,
}
impl Default for EnumRepr {
fn default() -> Self {
Self::Default
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum VariantError {
IndexOutOfBounds,
NotAnEnum,
NoSuchVariant,
}
impl std::error::Error for VariantError {}
impl std::fmt::Display for VariantError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
VariantError::IndexOutOfBounds => write!(f, "Variant index out of bounds"),
VariantError::NotAnEnum => write!(f, "Not an enum"),
VariantError::NoSuchVariant => write!(f, "No such variant"),
}
}
}