use chrono::{DateTime, Utc};
use crate::entities::link::structure::Link;
use super::structure::InformationBeforeDive;
const MISSING_INFO_BEFORE_DIVE_DIVE_NUMBER: &str = "Dive number is required";
const MISSING_INFO_BEFORE_DIVE_DATE_TIME: &str = "Date time is required";
pub struct InformationBeforeDiveBuilder {
link: Vec<Link>,
dive_number: Option<u64>,
date_time: Option<DateTime<Utc>>,
}
impl InformationBeforeDiveBuilder {
pub fn new() -> Self {
InformationBeforeDiveBuilder {
link: Vec::new(),
dive_number: None,
date_time: None,
}
}
pub fn add_link(mut self, link: Link) -> Self {
self.link.push(link);
self
}
pub fn dive_number(mut self, dive_number: u64) -> Self {
self.dive_number = Some(dive_number);
self
}
pub fn date_time(mut self, date_time: DateTime<Utc>) -> Self {
self.date_time = Some(date_time);
self
}
pub fn build(self) -> Result<InformationBeforeDive, &'static str> {
Ok(InformationBeforeDive {
link: self.link,
dive_number: self
.dive_number
.ok_or(MISSING_INFO_BEFORE_DIVE_DIVE_NUMBER)?,
date_time: self.date_time.ok_or(MISSING_INFO_BEFORE_DIVE_DATE_TIME)?,
})
}
}
impl Default for InformationBeforeDiveBuilder {
fn default() -> Self {
Self::new()
}
}