tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

locale.rs (6651B)


      1 // This file is part of ICU4X. For terms of use, please see the file
      2 // called LICENSE at the top level of the ICU4X source tree
      3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
      4 
      5 #[diplomat::bridge]
      6 #[diplomat::abi_rename = "icu4x_{0}_mv1"]
      7 #[diplomat::attr(auto, namespace = "icu4x")]
      8 pub mod ffi {
      9    use alloc::boxed::Box;
     10 
     11    use crate::unstable::locale_core::ffi::Locale;
     12    #[cfg(feature = "buffer_provider")]
     13    use crate::unstable::{errors::ffi::DataError, provider::ffi::DataProvider};
     14 
     15    #[diplomat::rust_link(icu::locale::TransformResult, Enum)]
     16    #[diplomat::enum_convert(icu_locale::TransformResult)]
     17    pub enum TransformResult {
     18        Modified,
     19        Unmodified,
     20    }
     21 
     22    /// A locale canonicalizer.
     23    #[diplomat::rust_link(icu::locale::LocaleCanonicalizer, Struct)]
     24    #[diplomat::opaque]
     25    pub struct LocaleCanonicalizer(icu_locale::LocaleCanonicalizer);
     26 
     27    impl LocaleCanonicalizer {
     28        /// Create a new [`LocaleCanonicalizer`] using compiled data.
     29        #[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_common, FnInStruct)]
     30        #[diplomat::attr(auto, constructor)]
     31        #[cfg(feature = "compiled_data")]
     32        pub fn create_common() -> Box<LocaleCanonicalizer> {
     33            Box::new(LocaleCanonicalizer(
     34                icu_locale::LocaleCanonicalizer::new_common(),
     35            ))
     36        }
     37        /// Create a new [`LocaleCanonicalizer`].
     38        #[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_common, FnInStruct)]
     39        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
     40        #[cfg(feature = "buffer_provider")]
     41        pub fn create_common_with_provider(
     42            provider: &DataProvider,
     43        ) -> Result<Box<LocaleCanonicalizer>, DataError> {
     44            Ok(Box::new(LocaleCanonicalizer(
     45                icu_locale::LocaleCanonicalizer::try_new_common_with_buffer_provider(
     46                    provider.get()?,
     47                )?,
     48            )))
     49        }
     50        /// Create a new [`LocaleCanonicalizer`] with extended data using compiled data.
     51        #[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_extended, FnInStruct)]
     52        #[diplomat::rust_link(
     53            icu::locale::LocaleCanonicalizer::new_with_expander,
     54            FnInStruct,
     55            hidden
     56        )]
     57        #[diplomat::attr(auto, named_constructor = "extended")]
     58        #[cfg(feature = "compiled_data")]
     59        pub fn create_extended() -> Box<LocaleCanonicalizer> {
     60            Box::new(LocaleCanonicalizer(
     61                icu_locale::LocaleCanonicalizer::new_extended(),
     62            ))
     63        }
     64        /// Create a new [`LocaleCanonicalizer`] with extended data.
     65        #[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_extended, FnInStruct)]
     66        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "extended_with_provider")]
     67        #[cfg(feature = "buffer_provider")]
     68        pub fn create_extended_with_provider(
     69            provider: &DataProvider,
     70        ) -> Result<Box<LocaleCanonicalizer>, DataError> {
     71            Ok(Box::new(LocaleCanonicalizer(
     72                icu_locale::LocaleCanonicalizer::try_new_extended_with_buffer_provider(
     73                    provider.get()?,
     74                )?,
     75            )))
     76        }
     77        #[diplomat::rust_link(icu::locale::LocaleCanonicalizer::canonicalize, FnInStruct)]
     78        pub fn canonicalize(&self, locale: &mut Locale) -> TransformResult {
     79            self.0.canonicalize(&mut locale.0).into()
     80        }
     81    }
     82 
     83    /// A locale expander.
     84    #[diplomat::rust_link(icu::locale::LocaleExpander, Struct)]
     85    #[diplomat::opaque]
     86    pub struct LocaleExpander(pub icu_locale::LocaleExpander);
     87 
     88    impl LocaleExpander {
     89        /// Create a new [`LocaleExpander`] using compiled data.
     90        #[diplomat::rust_link(icu::locale::LocaleExpander::new_common, FnInStruct)]
     91        #[diplomat::attr(auto, constructor)]
     92        #[cfg(feature = "compiled_data")]
     93        pub fn create_common() -> Box<LocaleExpander> {
     94            Box::new(LocaleExpander(icu_locale::LocaleExpander::new_common()))
     95        }
     96        /// Create a new [`LocaleExpander`] using a new_common data source.
     97        #[diplomat::rust_link(icu::locale::LocaleExpander::new_common, FnInStruct)]
     98        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
     99        #[cfg(feature = "buffer_provider")]
    100        pub fn create_common_with_provider(
    101            provider: &DataProvider,
    102        ) -> Result<Box<LocaleExpander>, DataError> {
    103            Ok(Box::new(LocaleExpander(
    104                icu_locale::LocaleExpander::try_new_common_with_buffer_provider(provider.get()?)?,
    105            )))
    106        }
    107        /// Create a new [`LocaleExpander`] with extended data using compiled data.
    108        #[diplomat::rust_link(icu::locale::LocaleExpander::new_extended, FnInStruct)]
    109        #[diplomat::attr(auto, named_constructor = "extended")]
    110        #[cfg(feature = "compiled_data")]
    111        pub fn create_extended() -> Box<LocaleExpander> {
    112            Box::new(LocaleExpander(icu_locale::LocaleExpander::new_extended()))
    113        }
    114        /// Create a new [`LocaleExpander`] with extended data using a particular data source.
    115        #[diplomat::rust_link(icu::locale::LocaleExpander::new_extended, FnInStruct)]
    116        #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "extended_with_provider")]
    117        #[cfg(feature = "buffer_provider")]
    118        pub fn create_extended_with_provider(
    119            provider: &DataProvider,
    120        ) -> Result<Box<LocaleExpander>, DataError> {
    121            Ok(Box::new(LocaleExpander(
    122                icu_locale::LocaleExpander::try_new_extended_with_buffer_provider(provider.get()?)?,
    123            )))
    124        }
    125        #[diplomat::rust_link(icu::locale::LocaleExpander::maximize, FnInStruct)]
    126        pub fn maximize(&self, locale: &mut Locale) -> TransformResult {
    127            self.0.maximize(&mut locale.0.id).into()
    128        }
    129 
    130        #[diplomat::rust_link(icu::locale::LocaleExpander::minimize, FnInStruct)]
    131        pub fn minimize(&self, locale: &mut Locale) -> TransformResult {
    132            self.0.minimize(&mut locale.0.id).into()
    133        }
    134 
    135        #[diplomat::rust_link(icu::locale::LocaleExpander::minimize_favor_script, FnInStruct)]
    136        pub fn minimize_favor_script(&self, locale: &mut Locale) -> TransformResult {
    137            self.0.minimize_favor_script(&mut locale.0.id).into()
    138        }
    139    }
    140 }