icu_provider crates.io

icu_provider is one of the [ICU4X] components.

Unicode's experience with ICU4X's parent projects, ICU4C and ICU4J, led the team to realize that data management is the most critical aspect of deploying internationalization, and that it requires a high level of customization for the needs of the platform it is embedded in. As a result ICU4X comes with a selection of providers that should allow for ICU4X to naturally fit into different business and technological needs of customers.

icu_provider defines traits and structs for transmitting data through the ICU4X locale data pipeline. The primary trait is [DataProvider]. It is parameterized by a [KeyedDataMarker], which contains the data type and a [DataKey]. It has one method, [DataProvider::load], which transforms a [DataRequest] into a [DataResponse].

In addition, there are three other traits which are widely implemented:

The most common types required for this crate are included via the prelude:

rust use icu_provider::prelude::*;

Types of Data Providers

All nontrivial data providers can fit into one of two classes.

  1. [AnyProvider]: Those whose data originates as structured Rust objects
  2. [BufferProvider]: Those whose data originates as unstructured [u8] buffers

✨ Key Insight: A given data provider is generally either an [AnyProvider] or a [BufferProvider]. Which type depends on the data source, and it is not generally possible to convert one to the other.

See also [crate::constructors].

AnyProvider

These providers are able to return structured data cast into dyn Any trait objects. Users can call [as_downcasting()] to get an object implementing [DataProvider] by downcasting the trait objects.

Examples of AnyProviders:

BufferProvider

These providers are able to return unstructured data typically represented as [serde]-serialized buffers. Users can call [as_deserializing()] to get an object implementing [DataProvider] by invoking Serde Deserialize.

Examples of BufferProviders:

Provider Adapters

ICU4X offers several built-in modules to combine providers in interesting ways. These can be found in the [icu_provider_adapters] crate.

Testing Provider

This crate also contains a concrete provider for testing purposes:

If you need a testing provider that contains the actual resource keys used by ICU4X features, see the [icu_testdata] crate.

Types and Lifetimes

Types compatible with [Yokeable] can be passed through the data provider, so long as they are associated with a marker type implementing [DataMarker].

Data structs should generally have one lifetime argument: 'data. This lifetime allows data structs to borrow zero-copy data.

Data generation API

This functionality is enabled with the "datagen" feature

The [datagen] module contains several APIs for data generation. See [icu_datagen] for the reference data generation implementation.

More Information

For more information on development, authorship, contributing etc. please visit ICU4X home page.