melodium-common 0.10.1

Common Mélodium elements and traits
Documentation
use core::{
    fmt::{self, Display, Formatter},
    str::FromStr,
};

#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub enum DataTrait {
    Option,
    Vec,

    // Infallilble conversions
    ToI8,
    ToI16,
    ToI32,
    ToI64,
    ToI128,
    ToU8,
    ToU16,
    ToU32,
    ToU64,
    ToU128,
    ToF32,
    ToF64,
    ToBool,
    ToByte,
    ToChar,
    ToString,

    // Faillible conversions (may give `none`)
    TryToI8,
    TryToI16,
    TryToI32,
    TryToI64,
    TryToI128,
    TryToU8,
    TryToU16,
    TryToU32,
    TryToU64,
    TryToU128,
    TryToF32,
    TryToF64,
    TryToBool,
    TryToByte,
    TryToChar,
    TryToString,

    SaturatingToI8,
    SaturatingToI16,
    SaturatingToI32,
    SaturatingToI64,
    SaturatingToI128,
    SaturatingToU8,
    SaturatingToU16,
    SaturatingToU32,
    SaturatingToU64,
    SaturatingToU128,
    SaturatingToF32,
    SaturatingToF64,

    Bounded,

    Binary,

    Signed,
    Float,

    PartialEquality,
    Equality,
    PartialOrder,
    Order,

    Add,
    CheckedAdd,
    SaturatingAdd,
    WrappingAdd,
    Sub,
    CheckedSub,
    SaturatingSub,
    WrappingSub,
    Mul,
    CheckedMul,
    SaturatingMul,
    WrappingMul,
    Div,
    CheckedDiv,
    Rem,
    CheckedRem,
    Neg,
    CheckedNeg,
    WrappingNeg,
    Pow,
    CheckedPow,

    Euclid,
    CheckedEuclid,

    Hash,

    Serialize,
    Deserialize,

    Display,
}

impl Display for DataTrait {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        match self {
            DataTrait::Option => write!(f, "Option"),
            DataTrait::Vec => write!(f, "Vec"),
            DataTrait::ToI8 => write!(f, "ToI8"),
            DataTrait::ToI16 => write!(f, "ToI16"),
            DataTrait::ToI32 => write!(f, "ToI32"),
            DataTrait::ToI64 => write!(f, "ToI64"),
            DataTrait::ToI128 => write!(f, "ToI128"),
            DataTrait::ToU8 => write!(f, "ToU8"),
            DataTrait::ToU16 => write!(f, "ToU16"),
            DataTrait::ToU32 => write!(f, "ToU32"),
            DataTrait::ToU64 => write!(f, "ToU64"),
            DataTrait::ToU128 => write!(f, "ToU128"),
            DataTrait::ToF32 => write!(f, "ToF32"),
            DataTrait::ToF64 => write!(f, "ToF64"),
            DataTrait::ToBool => write!(f, "ToBool"),
            DataTrait::ToByte => write!(f, "ToByte"),
            DataTrait::ToChar => write!(f, "ToChar"),
            DataTrait::ToString => write!(f, "ToString"),
            DataTrait::TryToI8 => write!(f, "TryToI8"),
            DataTrait::TryToI16 => write!(f, "TryToI16"),
            DataTrait::TryToI32 => write!(f, "TryToI32"),
            DataTrait::TryToI64 => write!(f, "TryToI64"),
            DataTrait::TryToI128 => write!(f, "TryToI128"),
            DataTrait::TryToU8 => write!(f, "TryToU8"),
            DataTrait::TryToU16 => write!(f, "TryToU16"),
            DataTrait::TryToU32 => write!(f, "TryToU32"),
            DataTrait::TryToU64 => write!(f, "TryToU64"),
            DataTrait::TryToU128 => write!(f, "TryToU128"),
            DataTrait::TryToF32 => write!(f, "TryToF32"),
            DataTrait::TryToF64 => write!(f, "TryToF64"),
            DataTrait::TryToBool => write!(f, "TryToBool"),
            DataTrait::TryToByte => write!(f, "TryToByte"),
            DataTrait::TryToChar => write!(f, "TryToChar"),
            DataTrait::TryToString => write!(f, "TryToString"),
            DataTrait::SaturatingToI8 => write!(f, "SaturatingToI8"),
            DataTrait::SaturatingToI16 => write!(f, "SaturatingToI16"),
            DataTrait::SaturatingToI32 => write!(f, "SaturatingToI32"),
            DataTrait::SaturatingToI64 => write!(f, "SaturatingToI64"),
            DataTrait::SaturatingToI128 => write!(f, "SaturatingToI128"),
            DataTrait::SaturatingToU8 => write!(f, "SaturatingToU8"),
            DataTrait::SaturatingToU16 => write!(f, "SaturatingToU16"),
            DataTrait::SaturatingToU32 => write!(f, "SaturatingToU32"),
            DataTrait::SaturatingToU64 => write!(f, "SaturatingToU64"),
            DataTrait::SaturatingToU128 => write!(f, "SaturatingToU128"),
            DataTrait::SaturatingToF32 => write!(f, "SaturatingToF32"),
            DataTrait::SaturatingToF64 => write!(f, "SaturatingToF64"),
            DataTrait::Bounded => write!(f, "Bounded"),
            DataTrait::Binary => write!(f, "Binary"),
            DataTrait::Signed => write!(f, "Signed"),
            DataTrait::Float => write!(f, "Float"),
            DataTrait::PartialEquality => write!(f, "PartialEquality"),
            DataTrait::Equality => write!(f, "Equality"),
            DataTrait::PartialOrder => write!(f, "PartialOrder"),
            DataTrait::Order => write!(f, "Order"),
            DataTrait::Add => write!(f, "Add"),
            DataTrait::CheckedAdd => write!(f, "CheckedAdd"),
            DataTrait::SaturatingAdd => write!(f, "SaturatingAdd"),
            DataTrait::WrappingAdd => write!(f, "WrappingAdd"),
            DataTrait::Sub => write!(f, "Sub"),
            DataTrait::CheckedSub => write!(f, "CheckedSub"),
            DataTrait::SaturatingSub => write!(f, "SaturatingSub"),
            DataTrait::WrappingSub => write!(f, "WrappingSub"),
            DataTrait::Mul => write!(f, "Mul"),
            DataTrait::CheckedMul => write!(f, "CheckedMul"),
            DataTrait::SaturatingMul => write!(f, "SaturatingMul"),
            DataTrait::WrappingMul => write!(f, "WrappingMul"),
            DataTrait::Div => write!(f, "Div"),
            DataTrait::CheckedDiv => write!(f, "CheckedDiv"),
            DataTrait::Rem => write!(f, "Rem"),
            DataTrait::CheckedRem => write!(f, "CheckedRem"),
            DataTrait::Neg => write!(f, "Neg"),
            DataTrait::CheckedNeg => write!(f, "CheckedNeg"),
            DataTrait::WrappingNeg => write!(f, "WrappingNeg"),
            DataTrait::Pow => write!(f, "Pow"),
            DataTrait::CheckedPow => write!(f, "CheckedPow"),
            DataTrait::Euclid => write!(f, "Euclid"),
            DataTrait::CheckedEuclid => write!(f, "CheckedEuclid"),
            DataTrait::Hash => write!(f, "Hash"),
            DataTrait::Serialize => write!(f, "Serialize"),
            DataTrait::Deserialize => write!(f, "Deserialize"),
            DataTrait::Display => write!(f, "Display"),
        }
    }
}

impl FromStr for DataTrait {
    type Err = String;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        match s {
            "Option" => Ok(DataTrait::Option),
            "Vec" => Ok(DataTrait::Vec),

            "ToI8" => Ok(DataTrait::ToI8),
            "ToI16" => Ok(DataTrait::ToI16),
            "ToI32" => Ok(DataTrait::ToI32),
            "ToI64" => Ok(DataTrait::ToI64),
            "ToI128" => Ok(DataTrait::ToI128),
            "ToU8" => Ok(DataTrait::ToU8),
            "ToU16" => Ok(DataTrait::ToU16),
            "ToU32" => Ok(DataTrait::ToU32),
            "ToU64" => Ok(DataTrait::ToU64),
            "ToU128" => Ok(DataTrait::ToU128),
            "ToF32" => Ok(DataTrait::ToF32),
            "ToF64" => Ok(DataTrait::ToF64),
            "ToBool" => Ok(DataTrait::ToBool),
            "ToByte" => Ok(DataTrait::ToByte),
            "ToChar" => Ok(DataTrait::ToChar),
            "ToString" => Ok(DataTrait::ToString),

            "TryToI8" => Ok(DataTrait::TryToI8),
            "TryToI16" => Ok(DataTrait::TryToI16),
            "TryToI32" => Ok(DataTrait::TryToI32),
            "TryToI64" => Ok(DataTrait::TryToI64),
            "TryToI128" => Ok(DataTrait::TryToI128),
            "TryToU8" => Ok(DataTrait::TryToU8),
            "TryToU16" => Ok(DataTrait::TryToU16),
            "TryToU32" => Ok(DataTrait::TryToU32),
            "TryToU64" => Ok(DataTrait::TryToU64),
            "TryToU128" => Ok(DataTrait::TryToU128),
            "TryToF32" => Ok(DataTrait::TryToF32),
            "TryToF64" => Ok(DataTrait::TryToF64),
            "TryToBool" => Ok(DataTrait::TryToBool),
            "TryToByte" => Ok(DataTrait::TryToByte),
            "TryToChar" => Ok(DataTrait::TryToChar),
            "TryToString" => Ok(DataTrait::TryToString),

            "SaturatingToI8" => Ok(DataTrait::SaturatingToI8),
            "SaturatingToI16" => Ok(DataTrait::SaturatingToI16),
            "SaturatingToI32" => Ok(DataTrait::SaturatingToI32),
            "SaturatingToI64" => Ok(DataTrait::SaturatingToI64),
            "SaturatingToI128" => Ok(DataTrait::SaturatingToI128),
            "SaturatingToU8" => Ok(DataTrait::SaturatingToU8),
            "SaturatingToU16" => Ok(DataTrait::SaturatingToU16),
            "SaturatingToU32" => Ok(DataTrait::SaturatingToU32),
            "SaturatingToU64" => Ok(DataTrait::SaturatingToU64),
            "SaturatingToU128" => Ok(DataTrait::SaturatingToU128),
            "SaturatingToF32" => Ok(DataTrait::SaturatingToF32),
            "SaturatingToF64" => Ok(DataTrait::SaturatingToF64),

            "Bounded" => Ok(DataTrait::Bounded),
            "Binary" => Ok(DataTrait::Binary),
            "Signed" => Ok(DataTrait::Signed),
            "Float" => Ok(DataTrait::Float),

            "PartialEquality" => Ok(DataTrait::PartialEquality),
            "Equality" => Ok(DataTrait::Equality),
            "PartialOrder" => Ok(DataTrait::PartialOrder),
            "Order" => Ok(DataTrait::Order),

            "Add" => Ok(DataTrait::Add),
            "CheckedAdd" => Ok(DataTrait::CheckedAdd),
            "SaturatingAdd" => Ok(DataTrait::SaturatingAdd),
            "WrappingAdd" => Ok(DataTrait::WrappingAdd),
            "Sub" => Ok(DataTrait::Sub),
            "CheckedSub" => Ok(DataTrait::CheckedSub),
            "SaturatingSub" => Ok(DataTrait::SaturatingSub),
            "WrappingSub" => Ok(DataTrait::WrappingSub),
            "Mul" => Ok(DataTrait::Mul),
            "CheckedMul" => Ok(DataTrait::CheckedMul),
            "SaturatingMul" => Ok(DataTrait::SaturatingMul),
            "WrappingMul" => Ok(DataTrait::WrappingMul),
            "Div" => Ok(DataTrait::Div),
            "CheckedDiv" => Ok(DataTrait::CheckedDiv),
            "Rem" => Ok(DataTrait::Rem),
            "CheckedRem" => Ok(DataTrait::CheckedRem),
            "Neg" => Ok(DataTrait::Neg),
            "CheckedNeg" => Ok(DataTrait::CheckedNeg),
            "WrappingNeg" => Ok(DataTrait::WrappingNeg),
            "Pow" => Ok(DataTrait::Pow),
            "CheckedPow" => Ok(DataTrait::CheckedPow),

            "Euclid" => Ok(DataTrait::Euclid),
            "CheckedEuclid" => Ok(DataTrait::CheckedEuclid),

            "Hash" => Ok(DataTrait::Hash),

            "Serialize" => Ok(DataTrait::Serialize),
            "Deserialize" => Ok(DataTrait::Deserialize),

            "Display" => Ok(DataTrait::Display),
            _ => Err(s.to_string()),
        }
    }
}