use serde::{Deserialize, Serialize};
#[allow(clippy::module_name_repetitions)]
#[derive(Serialize, Deserialize, Debug, Clone, Default, specta::Type)]
#[serde(rename_all = "camelCase")]
pub struct Milkable {
material: String,
frequency: u32,
}
impl Milkable {
#[must_use]
pub fn from_value(value: &str) -> Self {
let split = value.split(':').collect::<Vec<&str>>();
if split.len() == 2 {
let material_str = *split.first().unwrap_or(&"");
return Self {
material: String::from(material_str),
frequency: split.get(1).unwrap_or(&"").parse::<u32>().unwrap_or(0),
};
}
Self::default()
}
#[must_use]
pub fn is_default(&self) -> bool {
self.material.is_empty() && self.frequency == 0
}
#[must_use]
pub fn as_vec(&self) -> Vec<String> {
let mut vec = Vec::new();
if !self.material.is_empty() {
vec.push(self.material.clone());
}
if self.frequency > 0 {
vec.push(self.frequency.to_string());
}
vec
}
pub fn get_material(&self) -> &str {
&self.material
}
pub const fn get_frequency(&self) -> u32 {
self.frequency
}
}