use chrono::Duration;
use crate::places::PlaceOpeningHoursPeriodDetail;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
pub struct PlaceOpeningHoursPeriod {
pub open: PlaceOpeningHoursPeriodDetail,
pub close: Option<PlaceOpeningHoursPeriodDetail>,
}
impl PlaceOpeningHoursPeriod {
#[must_use] pub fn duration(&self) -> Option<Duration> {
self.close.as_ref().map(|close| {
let days: u32 = close.day.days_since(self.open.day);
let mut duration = Duration::days(i64::from(days));
duration += close.time - self.open.time;
duration
})
} }
impl std::str::FromStr for PlaceOpeningHoursPeriod {
type Err = serde_json::error::Error;
fn from_str(s: &str) -> Result<Self, serde_json::error::Error> {
serde_json::from_str(s)
} }