Skip to content

Commit

Permalink
Returning correct locale errors in datagen (#3578)
Browse files Browse the repository at this point in the history
  • Loading branch information
robertbastian authored Jun 24, 2023
1 parent 8b30bb1 commit 67ccd5e
Show file tree
Hide file tree
Showing 31 changed files with 128 additions and 36 deletions.
6 changes: 4 additions & 2 deletions provider/datagen/src/transform/cldr/calendar/japanese.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,18 @@ impl crate::DatagenProvider {
}

impl DataProvider<JapaneseErasV1Marker> for crate::DatagenProvider {
fn load(&self, _req: DataRequest) -> Result<DataResponse<JapaneseErasV1Marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<JapaneseErasV1Marker>, DataError> {
self.check_req::<JapaneseErasV1Marker>(req)?;
self.load_japanese_eras(false)
}
}

impl DataProvider<JapaneseExtendedErasV1Marker> for crate::DatagenProvider {
fn load(
&self,
_req: DataRequest,
req: DataRequest,
) -> Result<DataResponse<JapaneseExtendedErasV1Marker>, DataError> {
self.check_req::<JapaneseExtendedErasV1Marker>(req)?;
let DataResponse { metadata, payload } = self.load_japanese_eras(true)?;
Ok(DataResponse {
metadata,
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/characters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ macro_rules! exemplar_chars_impls {
($data_marker_name:ident, $cldr_serde_field_name:ident) => {
impl DataProvider<$data_marker_name> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$data_marker_name>, DataError> {
self.check_req::<$data_marker_name>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::exemplar_chars::Resource = self
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/datetime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ macro_rules! impl_data_provider {
($marker:ident, $expr:expr, calendared = $calendared:expr) => {
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
if $calendared == "locale" && req.locale.is_empty() {
return Err(DataErrorKind::NeedsLocale.into_error());
}
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/datetime/week_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ impl IterableDataProvider<WeekDataV1Marker> for crate::DatagenProvider {

impl DataProvider<WeekDataV1Marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<WeekDataV1Marker>, DataError> {
self.check_req::<WeekDataV1Marker>(req)?;
let territory = req
.locale
.region()
Expand Down
2 changes: 2 additions & 0 deletions provider/datagen/src/transform/cldr/decimal/compact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ impl DataProvider<ShortCompactDecimalFormatDataV1Marker> for crate::DatagenProvi
&self,
req: DataRequest,
) -> Result<DataResponse<ShortCompactDecimalFormatDataV1Marker>, DataError> {
self.check_req::<ShortCompactDecimalFormatDataV1Marker>(req)?;
let langid = req.locale.get_langid();

let resource: &cldr_serde::numbers::Resource = self
Expand Down Expand Up @@ -67,6 +68,7 @@ impl DataProvider<LongCompactDecimalFormatDataV1Marker> for crate::DatagenProvid
&self,
req: DataRequest,
) -> Result<DataResponse<LongCompactDecimalFormatDataV1Marker>, DataError> {
self.check_req::<LongCompactDecimalFormatDataV1Marker>(req)?;
let langid = req.locale.get_langid();

let resource: &cldr_serde::numbers::Resource = self
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/decimal/symbols.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ use tinystr::TinyAsciiStr;

impl DataProvider<DecimalSymbolsV1Marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<DecimalSymbolsV1Marker>, DataError> {
self.check_req::<DecimalSymbolsV1Marker>(req)?;
let langid = req.locale.get_langid();

let resource: &cldr_serde::numbers::Resource = self
Expand Down
2 changes: 2 additions & 0 deletions provider/datagen/src/transform/cldr/displaynames/language.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ impl DataProvider<LanguageDisplayNamesV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<LanguageDisplayNamesV1Marker>, DataError> {
self.check_req::<LanguageDisplayNamesV1Marker>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::displaynames::language::Resource = self
Expand All @@ -39,6 +40,7 @@ impl DataProvider<LocaleDisplayNamesV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<LocaleDisplayNamesV1Marker>, DataError> {
self.check_req::<LocaleDisplayNamesV1Marker>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::displaynames::language::Resource = self
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/displaynames/region.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ impl DataProvider<RegionDisplayNamesV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<RegionDisplayNamesV1Marker>, DataError> {
self.check_req::<RegionDisplayNamesV1Marker>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::displaynames::region::Resource = self
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/displaynames/script.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ impl DataProvider<ScriptDisplayNamesV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<ScriptDisplayNamesV1Marker>, DataError> {
self.check_req::<ScriptDisplayNamesV1Marker>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::displaynames::script::Resource = self
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ impl DataProvider<VariantDisplayNamesV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<VariantDisplayNamesV1Marker>, DataError> {
self.check_req::<VariantDisplayNamesV1Marker>(req)?;
let langid = req.locale.get_langid();

let data: &cldr_serde::displaynames::variant::Resource = self
Expand Down
9 changes: 6 additions & 3 deletions provider/datagen/src/transform/cldr/fallback/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@ use zerovec::{maps::ZeroMap2d, ule::UnvalidatedStr};
impl DataProvider<LocaleFallbackLikelySubtagsV1Marker> for crate::DatagenProvider {
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<LocaleFallbackLikelySubtagsV1Marker>, DataError> {
self.check_req::<LocaleFallbackLikelySubtagsV1Marker>(req)?;
let resources = LikelySubtagsResources::try_from_source_data(&self.source)?;

let metadata = DataResponseMetadata::default();
Expand All @@ -36,8 +37,9 @@ impl DataProvider<LocaleFallbackLikelySubtagsV1Marker> for crate::DatagenProvide
impl DataProvider<LocaleFallbackParentsV1Marker> for crate::DatagenProvider {
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<LocaleFallbackParentsV1Marker>, DataError> {
self.check_req::<LocaleFallbackParentsV1Marker>(req)?;
let parents_data: &cldr_serde::parent_locales::Resource = self
.source
.cldr()?
Expand All @@ -55,8 +57,9 @@ impl DataProvider<LocaleFallbackParentsV1Marker> for crate::DatagenProvider {
impl DataProvider<CollationFallbackSupplementV1Marker> for crate::DatagenProvider {
fn load(
&self,
_req: DataRequest,
req: DataRequest,
) -> Result<DataResponse<CollationFallbackSupplementV1Marker>, DataError> {
self.check_req::<CollationFallbackSupplementV1Marker>(req)?;
// TODO(#1964): Load this data from its proper sources. For now, it is copied from:
// https://github.com/unicode-org/icu/blob/main/tools/cldr/cldr-to-icu/build-icu-data.xml
// as well as from CLDR XML.
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/list/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ macro_rules! implement {
($marker:ident) => {
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
load(self, req)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ use tinystr::TinyAsciiStr;
use zerovec::ZeroSlice;

impl DataProvider<AliasesV1Marker> for crate::DatagenProvider {
fn load(&self, _: DataRequest) -> Result<DataResponse<AliasesV1Marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<AliasesV1Marker>, DataError> {
self.check_req::<AliasesV1Marker>(req)?;
let data: &cldr_serde::aliases::Resource = self
.source
.cldr()?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ use icu_provider::datagen::IterableDataProvider;
use icu_provider::prelude::*;

impl DataProvider<ScriptDirectionV1Marker> for crate::DatagenProvider {
fn load(&self, _: DataRequest) -> Result<DataResponse<ScriptDirectionV1Marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<ScriptDirectionV1Marker>, DataError> {
self.check_req::<ScriptDirectionV1Marker>(req)?;
let data: &cldr_serde::directionality::Resource = self
.source
.cldr()?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ use icu_provider::prelude::*;
use std::collections::{BTreeMap, HashSet};

impl DataProvider<LikelySubtagsV1Marker> for crate::DatagenProvider {
fn load(&self, _: DataRequest) -> Result<DataResponse<LikelySubtagsV1Marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<LikelySubtagsV1Marker>, DataError> {
self.check_req::<LikelySubtagsV1Marker>(req)?;
let resources = LikelySubtagsResources::try_from_source_data(&self.source)?;

Ok(DataResponse {
Expand All @@ -31,8 +32,9 @@ impl IterableDataProvider<LikelySubtagsV1Marker> for crate::DatagenProvider {
impl DataProvider<LikelySubtagsExtendedV1Marker> for crate::DatagenProvider {
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<LikelySubtagsExtendedV1Marker>, DataError> {
self.check_req::<LikelySubtagsExtendedV1Marker>(req)?;
let resources = LikelySubtagsResources::try_from_source_data(&self.source)?;

Ok(DataResponse {
Expand All @@ -55,6 +57,7 @@ impl DataProvider<LikelySubtagsForLanguageV1Marker> for crate::DatagenProvider {
&self,
req: DataRequest,
) -> Result<DataResponse<LikelySubtagsForLanguageV1Marker>, DataError> {
self.check_req::<LikelySubtagsForLanguageV1Marker>(req)?;
let response = DataProvider::<LikelySubtagsV1Marker>::load(self, req)?;
Ok(DataResponse {
metadata: response.metadata,
Expand All @@ -74,6 +77,7 @@ impl DataProvider<LikelySubtagsForScriptRegionV1Marker> for crate::DatagenProvid
&self,
req: DataRequest,
) -> Result<DataResponse<LikelySubtagsForScriptRegionV1Marker>, DataError> {
self.check_req::<LikelySubtagsForScriptRegionV1Marker>(req)?;
let response = DataProvider::<LikelySubtagsV1Marker>::load(self, req)?;
Ok(DataResponse {
metadata: response.metadata,
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/plurals/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ macro_rules! implement {
($marker:ident) => {
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
Ok(DataResponse {
metadata: Default::default(),
payload: Some(DataPayload::from_owned(PluralRulesV1::from(
Expand Down
1 change: 1 addition & 0 deletions provider/datagen/src/transform/cldr/relativetime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ macro_rules! make_data_provider {
&self,
req: DataRequest,
) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let langid = req.locale.get_langid();
let resource: &cldr_serde::date_fields::Resource = self
.source
Expand Down
6 changes: 2 additions & 4 deletions provider/datagen/src/transform/cldr/time_zones/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ macro_rules! impl_data_provider {
$(
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let langid = req.locale.get_langid();

let resource: &cldr_serde::time_zones::time_zone_names::Resource = self
Expand Down Expand Up @@ -256,10 +257,7 @@ mod tests {
);

let metazone_period: DataPayload<MetazonePeriodV1Marker> = provider
.load(DataRequest {
locale: &langid!("en").into(),
metadata: Default::default(),
})
.load(Default::default())
.unwrap()
.take_payload()
.unwrap();
Expand Down
4 changes: 4 additions & 0 deletions provider/datagen/src/transform/icuexport/collator/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ macro_rules! collation_provider {
$(
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let $toml_data: &collator_serde::$serde_struct = self
.source
.icuexport()?
Expand Down Expand Up @@ -160,6 +161,9 @@ macro_rules! collation_provider {

impl IterableDataProvider<$marker> for crate::DatagenProvider {
fn supported_locales(&self) -> Result<Vec<DataLocale>, DataError> {
if <$marker>::KEY.metadata().singleton {
return Ok(vec![Default::default()])
}
Ok(self.source.options.locales.filter_by_langid_equality(self
.source
.icuexport()?
Expand Down
4 changes: 3 additions & 1 deletion provider/datagen/src/transform/icuexport/collator/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,9 @@ fn test_nb_nn_no() {

#[test]
fn test_zh() {
let provider = crate::DatagenProvider::for_test();
let mut provider = crate::DatagenProvider::for_test();
// `zh-u-co-gb2312` needs to be manually enabled
provider.source.options.collations.insert("gb2312".into());
let provider = LocaleFallbackProvider::try_new_unstable(provider).unwrap();
let provider = ResolvedLocaleAdapter::new(provider);

Expand Down
3 changes: 2 additions & 1 deletion provider/datagen/src/transform/icuexport/normalizer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ macro_rules! normalization_provider {
use icu_normalizer::provider::$marker;

impl DataProvider<$marker> for crate::DatagenProvider {
fn load(&self, _req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let $toml_data: &normalizer_serde::$serde_struct =
self.source.icuexport()?.read_and_parse_toml(&format!(
"norm/{}/{}.toml",
Expand Down
3 changes: 2 additions & 1 deletion provider/datagen/src/transform/icuexport/ucase/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ use std::convert::TryFrom;
mod ucase_serde;

impl DataProvider<CaseMappingV1Marker> for crate::DatagenProvider {
fn load(&self, _req: DataRequest) -> Result<DataResponse<CaseMappingV1Marker>, DataError> {
fn load(&self, req: DataRequest) -> Result<DataResponse<CaseMappingV1Marker>, DataError> {
self.check_req::<CaseMappingV1Marker>(req)?;
let toml = &self
.source
.icuexport()?
Expand Down
7 changes: 5 additions & 2 deletions provider/datagen/src/transform/icuexport/uprops/bidi_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ impl DataProvider<BidiAuxiliaryPropertiesV1Marker> for crate::DatagenProvider {
#[cfg(any(feature = "use_wasm", feature = "use_icu4c"))]
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<BidiAuxiliaryPropertiesV1Marker>, DataError> {
use crate::transform::icuexport::uprops::{bin_cp_set, enum_codepointtrie};
use icu_codepointtrie_builder::{CodePointTrieBuilder, CodePointTrieBuilderData};
Expand All @@ -42,6 +42,8 @@ impl DataProvider<BidiAuxiliaryPropertiesV1Marker> for crate::DatagenProvider {
BidiAuxiliaryPropertiesV1, MirroredPairedBracketData,
};

self.check_req::<BidiAuxiliaryPropertiesV1Marker>(req)?;

// Bidi_M / Bidi_Mirrored
let bidi_m_data = bin_cp_set::get_binary_prop_for_code_point_set(&self.source, "Bidi_M")?;
let mut bidi_m_builder = CodePointInversionListBuilder::new();
Expand Down Expand Up @@ -100,8 +102,9 @@ impl DataProvider<BidiAuxiliaryPropertiesV1Marker> for crate::DatagenProvider {
#[cfg(not(any(feature = "use_wasm", feature = "use_icu4c")))]
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<BidiAuxiliaryPropertiesV1Marker>, DataError> {
self.check_req::<BidiAuxiliaryPropertiesV1Marker>(req)?;
return Err(DataError::custom(
"icu_datagen must be built with use_icu4c or use_wasm to build Bidi auxiliary properties data",
));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,9 @@ macro_rules! expand {
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let data = get_binary_prop_for_code_point_set(&self.source, $prop_name)?;

let mut builder = CodePointInversionListBuilder::new();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@ macro_rules! expand {
impl DataProvider<$marker> for crate::DatagenProvider {
fn load(
&self,
_: DataRequest,
req: DataRequest,
) -> Result<DataResponse<$marker>, DataError> {
self.check_req::<$marker>(req)?;
let data = get_binary_prop_for_unicodeset(&self.source, $prop_name)?;

let mut builder = CodePointInversionListBuilder::new();
Expand Down
Loading

0 comments on commit 67ccd5e

Please sign in to comment.