use crate::entities::{dive_base::structure::DiveBase, site::structure::Site};
use super::structure::DiveSite;
const MISSING_DIVE_SITE_DIVE_BASE: &str = "Dive site dive base is required";
pub struct DiveSiteBuilder {
dive_base: Option<DiveBase>,
site: Option<Site>,
}
impl DiveSiteBuilder {
pub fn new() -> Self {
DiveSiteBuilder {
dive_base: None,
site: None,
}
}
pub fn dive_base(mut self, dive_base: DiveBase) -> Self {
self.dive_base = Some(dive_base);
self
}
pub fn site(mut self, site: Site) -> Self {
self.site = Some(site);
self
}
pub fn build(self) -> Result<DiveSite, &'static str> {
Ok(DiveSite {
dive_base: self.dive_base.ok_or(MISSING_DIVE_SITE_DIVE_BASE)?,
site: self.site,
})
}
}
impl Default for DiveSiteBuilder {
fn default() -> Self {
Self::new()
}
}