use icu_datetime::provider::{
calendar::{DatePatternsV1Marker, DateSkeletonPatternsV1Marker, DateSymbolsV1Marker},
week_data::WeekDataV1Marker,
};
use icu_locale_canonicalizer::{
provider::{AliasesV1Marker, LikelySubtagsV1Marker},
LocaleCanonicalizer,
};
use icu_plurals::provider::OrdinalV1Marker;
use icu_provider::prelude::*;
pub trait BoaProvider:
ResourceProvider<AliasesV1Marker>
+ ResourceProvider<LikelySubtagsV1Marker>
+ ResourceProvider<DateSymbolsV1Marker>
+ ResourceProvider<DatePatternsV1Marker>
+ ResourceProvider<DateSkeletonPatternsV1Marker>
+ ResourceProvider<OrdinalV1Marker>
+ ResourceProvider<WeekDataV1Marker>
{
}
impl<T> BoaProvider for T where
T: ResourceProvider<AliasesV1Marker>
+ ResourceProvider<LikelySubtagsV1Marker>
+ ResourceProvider<DateSymbolsV1Marker>
+ ResourceProvider<DatePatternsV1Marker>
+ ResourceProvider<DateSkeletonPatternsV1Marker>
+ ResourceProvider<OrdinalV1Marker>
+ ResourceProvider<WeekDataV1Marker>
+ ?Sized
{
}
#[allow(unused)]
pub(crate) struct Icu {
provider: Box<dyn BoaProvider>,
locale_canonicalizer: LocaleCanonicalizer,
}
impl std::fmt::Debug for Icu {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
#[derive(Debug)]
struct Canonicalizer;
f.debug_struct("Icu")
.field("locale_canonicalizer", &Canonicalizer)
.finish()
}
}
impl Icu {
pub(crate) fn new(provider: Box<dyn BoaProvider>) -> Result<Self, DataError> {
Ok(Self {
locale_canonicalizer: LocaleCanonicalizer::new(&*provider)?,
provider,
})
}
pub(crate) fn locale_canonicalizer(&self) -> &LocaleCanonicalizer {
&self.locale_canonicalizer
}
#[allow(unused)]
pub(crate) fn provider(&self) -> &dyn BoaProvider {
self.provider.as_ref()
}
}