use std::fmt;
use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Version {
pub major: &'static str,
pub minor: &'static str,
pub patch: &'static str,
}
impl fmt::Display for Version {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}.{}.{}", self.major, self.minor, self.patch)
}
}
impl From<&'static str> for Version {
fn from(s: &'static str) -> Self {
let mut v = s.split('.');
Version {
major: v.next().unwrap(),
minor: v.next().unwrap(),
patch: v.next().unwrap(),
}
}
}
impl From<String> for Version {
fn from(s: String) -> Self {
let leaked = Box::leak(s.into_boxed_str());
let mut v = leaked.split('.');
Version {
major: v.next().unwrap(),
minor: v.next().unwrap(),
patch: v.next().unwrap(),
}
}
}
impl From<Version> for String {
fn from(v: Version) -> Self {
format!("{}.{}.{}", v.major, v.minor, v.patch)
}
}