use super::structure::Mix;
const MISSING_MIX_ID: &str = "Mix ID is required";
const MISSING_MIX_NAME: &str = "Mix name is required";
pub struct MixBuilder {
id: Option<String>,
name: Option<String>,
oxygen: Option<f64>,
helium: Option<f64>,
}
impl MixBuilder {
pub fn new() -> Self {
MixBuilder {
id: None,
name: None,
oxygen: None,
helium: None,
}
}
pub fn id(mut self, id: String) -> Self {
self.id = Some(id);
self
}
pub fn name(mut self, name: String) -> Self {
self.name = Some(name);
self
}
pub fn oxygen(mut self, oxygen: f64) -> Self {
self.oxygen = Some(oxygen);
self
}
pub fn helium(mut self, helium: f64) -> Self {
self.helium = Some(helium);
self
}
pub fn build(self) -> Result<Mix, &'static str> {
Ok(Mix {
id: self.id.ok_or(MISSING_MIX_ID)?,
name: self.name.ok_or(MISSING_MIX_NAME)?,
oxygen: self.oxygen,
helium: self.helium,
})
}
}
impl Default for MixBuilder {
fn default() -> Self {
Self::new()
}
}