use serde::{Deserialize, Serialize};
use std::{fmt, str::FromStr};
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq, Eq, Hash)]
pub struct NonNegativeNumber {
string: String,
value: usize,
}
impl NonNegativeNumber {
pub fn string(&self) -> &str {
&self.string
}
pub fn value(&self) -> usize {
self.value
}
pub fn is_zero(&self) -> bool {
self.value == 0
}
}
impl From<String> for NonNegativeNumber {
fn from(string: String) -> Self {
let value = usize::from_str(&string).unwrap();
Self { string, value }
}
}
impl From<usize> for NonNegativeNumber {
fn from(value: usize) -> Self {
let string = value.to_string();
Self { string, value }
}
}
impl fmt::Display for NonNegativeNumber {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.value)
}
}