zinq-schema 0.0.0

the core schema abstractions for zinq crates.
Documentation
use std::fmt;

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Number {
    Int(i64),
    Float(f64),
}

impl Number {
    pub fn is_i64(&self) -> bool {
        return match self {
            Self::Int(_) => true,
            _ => false,
        };
    }

    pub fn is_f64(&self) -> bool {
        return match self {
            Self::Float(_) => true,
            _ => false,
        };
    }

    pub fn as_i64(&self) -> i64 {
        return match self {
            Self::Int(v) => *v,
            Self::Float(v) => *v as i64,
        };
    }

    pub fn as_f64(&self) -> f64 {
        return match self {
            Self::Int(v) => *v as f64,
            Self::Float(v) => *v,
        };
    }
}

impl From<i64> for Number {
    fn from(value: i64) -> Self {
        return Self::Int(value);
    }
}

impl From<&i64> for Number {
    fn from(value: &i64) -> Self {
        return Self::Int(*value);
    }
}

impl Into<i64> for Number {
    fn into(self) -> i64 {
        return self.as_i64();
    }
}

impl From<f64> for Number {
    fn from(value: f64) -> Self {
        return Self::Float(value);
    }
}

impl From<&f64> for Number {
    fn from(value: &f64) -> Self {
        return Self::Float(*value);
    }
}

impl Into<f64> for Number {
    fn into(self) -> f64 {
        return self.as_f64();
    }
}

impl fmt::Display for Number {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        return match self {
            Self::Int(v) => write!(f, "{}", v),
            Self::Float(v) => write!(f, "{}", v),
        };
    }
}