#[derive(Default)] pub struct Datetime { handler: H, } impl Datetime { pub fn new(handler: H) -> Self { Self { handler } } } pub trait Handler { fn year(&self) -> u16; fn month(&self) -> u8; fn day(&self) -> u8; fn hour(&self) -> u8; fn minute(&self) -> u8; fn second(&self) -> u8; fn day_of_year(&self) -> u16; fn day_of_week(&self) -> u8; fn is_dst(&self) -> u8; } impl Datetime { pub(crate) fn year(&self) -> u16 { self.handler.year() } pub(crate) fn month(&self) -> u8 { self.handler.month() } pub(crate) fn day(&self) -> u8 { self.handler.day() } pub(crate) fn hour(&self) -> u8 { self.handler.hour() } pub(crate) fn minute(&self) -> u8 { self.handler.minute() } pub(crate) fn second(&self) -> u8 { self.handler.second() } pub(crate) fn day_of_year(&self) -> u16 { self.handler.day_of_year() } pub(crate) fn day_of_week(&self) -> u8 { self.handler.day_of_week() } pub(crate) fn is_dst(&self) -> u8 { self.handler.is_dst() } }