use crate::internals::pretty_formatter::PrettyDisplay;
use std::fmt::Display;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;

#[derive(Copy, Clone, Debug, PartialEq)]
pub enum IntegerObject {
    Positive(u64),
    Negative(i64),
}

impl From<u64> for IntegerObject {
    fn from(num: u64) -> Self {
        Self::Positive(num)
    }
}

impl From<i64> for IntegerObject {
    fn from(num: i64) -> Self {
        Self::Negative(num)
    }
}

impl Display for IntegerObject {
    fn fmt(&self, formatter: &mut Formatter<'_>) -> FmtResult {
        match *self {
            Self::Positive(n) => write!(formatter, "{n}"),
            Self::Negative(n) => write!(formatter, "{n}"),
        }
    }
}

impl PrettyDisplay for IntegerObject {}
