use core::hash::Hash;
use crate::{Date, Month, Year, YearMonth};
pub(crate) mod iso;
pub use iso::Iso;
pub trait Calendar: PartialEq + Eq + Hash + Copy + Clone + Sized + Send + Sync + 'static {
fn date(self, year: i32, month: u8, day: u8) -> crate::Result<Date<Self>>;
#[doc(hidden)]
fn date_from_ordinal(self, year: i32, day: u16) -> crate::Result<Date<Self>>;
#[doc(hidden)]
fn date_components(self, days: i32) -> (Year<Self>, Month<Self>, u8);
#[doc(hidden)]
fn date_to_ordinal(self, days: i32) -> (Year<Self>, u16);
fn year(self, year: i32) -> crate::Result<Year<Self>>;
#[doc(hidden)]
fn year_is_leap(self, year: i32) -> bool;
#[doc(hidden)]
fn year_days(self, year: i32) -> u16;
#[doc(hidden)]
fn year_months(self, year: i32) -> u8;
fn year_month(self, year: i32, month: u8) -> crate::Result<YearMonth<Self>>;
#[doc(hidden)]
fn year_month_days(self, year: i32, month: u8) -> u8;
}