p101_is 1.0.0

Represent Olivetti Programma 101 programs
Documentation
use std::fmt;

#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum CaiSign {
    Negative,
    Positive,
}

impl fmt::Display  for CaiSign {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
        let text = match self {
            CaiSign::Positive => "+",
            CaiSign::Negative => "-"
        };

        write!(f, "{}", text)
    }
}

#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum CaiOrder {
    Low,
    High,
}

impl fmt::Display  for CaiOrder {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
        let text = match self {
            CaiOrder::High => "H",
            CaiOrder::Low => "L"
        };

        write!(f, "{}", text)
    }
}

#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum CaiDigit {
    N1,
    N2,
    N3,
    N4,
    N5,
    N6,
    N7,
    N8,
    N9,
    N0,
}

impl From<CaiDigit> for i64 {
    fn from(d: CaiDigit) -> Self {
        match d {
            CaiDigit::N0 => 0.into(),
            CaiDigit::N1 => 1.into(),
            CaiDigit::N2 => 2.into(),
            CaiDigit::N3 => 3.into(),
            CaiDigit::N4 => 4.into(),
            CaiDigit::N5 => 5.into(),
            CaiDigit::N6 => 6.into(),
            CaiDigit::N7 => 7.into(),
            CaiDigit::N8 => 8.into(),
            CaiDigit::N9 => 9.into(),
        }
    }
}

impl fmt::Display  for CaiDigit {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
        let text = match self {
            CaiDigit::N0 => "0",
            CaiDigit::N1 => "1",
            CaiDigit::N2 => "2",
            CaiDigit::N3 => "3",
            CaiDigit::N4 => "4",
            CaiDigit::N5 => "5",
            CaiDigit::N6 => "6",
            CaiDigit::N7 => "7",
            CaiDigit::N8 => "8",
            CaiDigit::N9 => "9"
        };

        write!(f, "{}", text)
    }
}

#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum CaiComma {
    No,
    Yes,
}

impl fmt::Display  for CaiComma {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> Result<(), fmt::Error> {
        let text = match self {
            CaiComma::Yes => ".",
            CaiComma::No => ""
        };

        write!(f, "{}", text)
    }
}