//! Traits for data providers that produce opaque buffers.
usecrate::prelude::*;
#[cfg(feature = "serde")] mod serde; #[cfg(feature = "serde")] pubuseself::serde::*;
/// [`DynamicDataMarker`] for raw buffers. Returned by [`BufferProvider`]. /// /// The data is expected to be deserialized before it can be used; see /// [`DataPayload::into_deserialized`]. #[non_exhaustive] #[derive(Debug)] pubstruct BufferMarker;
impl DynamicDataMarker for BufferMarker { type DataStruct = &'static [u8];
}
/// A data provider that returns opaque bytes. /// /// Generally, these bytes are expected to be deserializable with Serde. To get an object /// implementing [`DataProvider`] via Serde, use [`as_deserializing()`]. /// /// Passing a `BufferProvider` to a `*_with_buffer_provider` constructor requires enabling /// the deserialization Cargo feature for the expected format(s): /// - `deserialize_json` /// - `deserialize_postcard_1` /// - `deserialize_bincode_1` /// /// Along with [`DataProvider`], this is one of the two foundational traits in this crate. /// /// [`BufferProvider`] can be made into a trait object. It is used over FFI. /// /// # Examples /// /// ``` /// # #[cfg(feature = "deserialize_json")] { /// use icu_locale_core::langid; /// use icu_provider::hello_world::*; /// use icu_provider::prelude::*; /// use std::borrow::Cow; /// /// let buffer_provider = HelloWorldProvider.into_json_provider(); /// /// // Deserializing manually /// assert_eq!( /// serde_json::from_slice::<HelloWorld>( /// buffer_provider /// .load_data( /// HelloWorldV1::INFO, /// DataRequest { /// id: DataIdentifierBorrowed::for_locale( /// &langid!("de").into() /// ), /// ..Default::default() /// } /// ) /// .expect("load should succeed") /// .payload /// .get() /// ) /// .expect("should deserialize"), /// HelloWorld { /// message: Cow::Borrowed("Hallo Welt"), /// }, /// ); /// /// // Deserialize automatically /// let deserializing_provider: &dyn DataProvider<HelloWorldV1> = /// &buffer_provider.as_deserializing(); /// /// assert_eq!( /// deserializing_provider /// .load(DataRequest { /// id: DataIdentifierBorrowed::for_locale(&langid!("de").into()), /// ..Default::default() /// }) /// .expect("load should succeed") /// .payload /// .get(), /// &HelloWorld { /// message: Cow::Borrowed("Hallo Welt"), /// }, /// ); /// # } /// ``` /// /// [`as_deserializing()`]: AsDeserializingBufferProvider::as_deserializing pubtrait BufferProvider: DynamicDataProvider<BufferMarker> {}
impl<P: DynamicDataProvider<BufferMarker> + ?Sized> BufferProvider for P {}
/// An enum expressing all Serde formats known to ICU4X. #[derive(Debug, PartialEq, Eq, Hash, Copy, Clone)] #[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] #[non_exhaustive] pubenum BufferFormat { /// Serialize using JavaScript Object Notation (JSON), using the [`serde_json`] crate.
Json, /// Serialize using the [`bincode`] crate, version 1.
Bincode1, /// Serialize using the [`postcard`] crate, version 1.
Postcard1,
}
impl BufferFormat { /// Returns an error if the buffer format is not enabled. pubfn check_available(&self) -> Result<(), DataError> { matchself { #[cfg(feature = "deserialize_json")]
BufferFormat::Json => Ok(()), #[cfg(not(feature = "deserialize_json"))]
BufferFormat::Json => Err(DataErrorKind::Deserialize.with_str_context("deserializing `BufferFormat::Json` requires the `deserialize_json` Cargo feature")),
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.