use serde::{Deserialize, Deserializer, Serialize};
use crate::{
codecs::DynamicJson,
types::{Date, ExchangeCode},
};
fn required_option<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where
D: Deserializer<'de>,
T: Deserialize<'de>,
{
Option::<T>::deserialize(deserializer)
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExchangeMarketHours {
pub exchange: ExchangeCode,
pub name: String,
pub opening_hour: String,
pub closing_hour: String,
pub timezone: String,
pub is_market_open: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ExchangeHoliday {
pub exchange: ExchangeCode,
pub date: Date,
pub name: String,
pub is_closed: bool,
#[serde(deserialize_with = "required_option")]
pub adj_open_time: Option<DynamicJson>,
#[serde(deserialize_with = "required_option")]
pub adj_close_time: Option<DynamicJson>,
}