use std::{fmt, fmt::Display};
use serde_derive::{Serialize, Deserialize};
use crate::error::{RLibError, Result};
const PFH6_PREAMBLE: &str = "PFH6"; const PFH5_PREAMBLE: &str = "PFH5"; const PFH4_PREAMBLE: &str = "PFH4"; const PFH3_PREAMBLE: &str = "PFH3"; const PFH2_PREAMBLE: &str = "PFH2"; const PFH0_PREAMBLE: &str = "PFH0";
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PFHVersion {
PFH6,
PFH5,
PFH4,
PFH3,
PFH2,
PFH0
}
impl PFHVersion {
pub fn value(&self) -> &str {
match *self {
PFHVersion::PFH6 => PFH6_PREAMBLE,
PFHVersion::PFH5 => PFH5_PREAMBLE,
PFHVersion::PFH4 => PFH4_PREAMBLE,
PFHVersion::PFH3 => PFH3_PREAMBLE,
PFHVersion::PFH2 => PFH2_PREAMBLE,
PFHVersion::PFH0 => PFH0_PREAMBLE,
}
}
pub fn version(value: &str) -> Result<Self> {
match value {
PFH6_PREAMBLE => Ok(PFHVersion::PFH6),
PFH5_PREAMBLE => Ok(PFHVersion::PFH5),
PFH4_PREAMBLE => Ok(PFHVersion::PFH4),
PFH3_PREAMBLE => Ok(PFHVersion::PFH3),
PFH2_PREAMBLE => Ok(PFHVersion::PFH2),
PFH0_PREAMBLE => Ok(PFHVersion::PFH0),
_ => Err(RLibError::UnknownPFHVersion(value.to_owned())),
}
}
}
impl Display for PFHVersion {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
PFHVersion::PFH6 => write!(f, "PFH6"),
PFHVersion::PFH5 => write!(f, "PFH5"),
PFHVersion::PFH4 => write!(f, "PFH4"),
PFHVersion::PFH3 => write!(f, "PFH3"),
PFHVersion::PFH2 => write!(f, "PFH2"),
PFHVersion::PFH0 => write!(f, "PFH0"),
}
}
}
impl Default for PFHVersion {
fn default() -> Self {
Self::PFH6
}
}