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