pub struct LangID {
pub language: Language,
pub script: Option<Script>,
pub region: Option<Region>,
/* private fields */
}Expand description
LanguageIdentifier is a core struct representing a Unicode Language Identifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let li: LanguageIdentifier = "en-US".parse()
.expect("Failed to parse.");
assert_eq!(li.language, "en");
assert_eq!(li.script, None);
assert_eq!(li.region.as_ref().map(Into::into), Some("US"));
assert_eq!(li.variants().len(), 0);§Parsing
Unicode recognizes three levels of standard conformance for any language identifier:
- well-formed - syntactically correct
- valid - well-formed and only uses registered language subtags, extensions, keywords, types…
- canonical - valid and no deprecated codes or structure.
At the moment parsing normalizes a well-formed language identifier converting
_ separators to - and adjusting casing to conform to the Unicode standard.
Any bogus subtags will cause the parsing to fail with an error. No subtag validation is performed.
§Examples:
use unic_langid_impl::LanguageIdentifier;
let li: LanguageIdentifier = "eN_latn_Us-Valencia".parse()
.expect("Failed to parse.");
assert_eq!(li.language, "en");
assert_eq!(li.script.as_ref().map(Into::into), Some("Latn"));
assert_eq!(li.region.as_ref().map(Into::into), Some("US"));
assert_eq!(li.variants().map(|v| v.as_str()).collect::<Vec<_>>(), &["valencia"]);Fields§
§language: Language§script: Option<Script>§region: Option<Region>Implementations§
Source§impl LanguageIdentifier
impl LanguageIdentifier
Sourcepub fn from_bytes(
v: &[u8],
) -> Result<LanguageIdentifier, LanguageIdentifierError>
pub fn from_bytes( v: &[u8], ) -> Result<LanguageIdentifier, LanguageIdentifierError>
A constructor which takes a utf8 slice, parses it and
produces a well-formed LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let li = LanguageIdentifier::from_bytes("en-US".as_bytes())
.expect("Parsing failed.");
assert_eq!(li.to_string(), "en-US");Sourcepub fn from_parts(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: &[Variant],
) -> LanguageIdentifier
pub fn from_parts( language: Language, script: Option<Script>, region: Option<Region>, variants: &[Variant], ) -> LanguageIdentifier
A constructor which takes optional subtags as AsRef<[u8]>, parses them and
produces a well-formed LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let li = LanguageIdentifier::from_parts(
"fr".parse().expect("Parsing failed."),
None,
Some("CA".parse().expect("Parsing failed.")),
&[]
);
assert_eq!(li.to_string(), "fr-CA");Sourcepub const fn from_raw_parts_unchecked(
language: Language,
script: Option<Script>,
region: Option<Region>,
variants: Option<Box<[Variant]>>,
) -> LanguageIdentifier
pub const fn from_raw_parts_unchecked( language: Language, script: Option<Script>, region: Option<Region>, variants: Option<Box<[Variant]>>, ) -> LanguageIdentifier
§Unchecked
This function accepts subtags expecting variants to be deduplicated and ordered.
Sourcepub fn into_parts(
self,
) -> (Language, Option<Script>, Option<Region>, Vec<Variant>)
pub fn into_parts( self, ) -> (Language, Option<Script>, Option<Region>, Vec<Variant>)
Consumes LanguageIdentifier and produces raw internal representations
of all subtags in form of u64/u32.
Primarily used for storing internal representation and restoring via
from_raw_parts_unchecked.
§Examples
use unic_langid_impl::LanguageIdentifier;
use tinystr::{TinyStr8, TinyStr4};
let li: LanguageIdentifier = "en-US".parse()
.expect("Parsing failed.");
let (lang, script, region, variants) = li.into_parts();
// let li2 = LanguageIdentifier::from_raw_parts_unchecked(
// lang.map(|l| unsafe { TinyStr8::new_unchecked(l) }),
// script.map(|s| unsafe { TinyStr4::new_unchecked(s) }),
// region.map(|r| unsafe { TinyStr4::new_unchecked(r) }),
// variants.map(|v| v.into_iter().map(|v| unsafe { TinyStr8::new_unchecked(*v) }).collect()),
//);
//assert_eq!(li2.to_string(), "en-US");Sourcepub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool,
) -> boolwhere
O: AsRef<LanguageIdentifier>,
pub fn matches<O>(
&self,
other: &O,
self_as_range: bool,
other_as_range: bool,
) -> boolwhere
O: AsRef<LanguageIdentifier>,
Compares a LanguageIdentifier to another AsRef<LanguageIdentifier
allowing for either side to use the missing fields as wildcards.
This allows for matching between en (treated as en-*-*-*) and en-US.
§Examples
use unic_langid_impl::LanguageIdentifier;
let li1: LanguageIdentifier = "en".parse()
.expect("Parsing failed.");
let li2: LanguageIdentifier = "en-US".parse()
.expect("Parsing failed.");
assert_ne!(li1, li2); // "en" != "en-US"
assert_ne!(li1.to_string(), li2.to_string()); // "en" != "en-US"
assert_eq!(li1.matches(&li2, false, false), false); // "en" != "en-US"
assert_eq!(li1.matches(&li2, true, false), true); // "en-*-*-*" == "en-US"
assert_eq!(li1.matches(&li2, false, true), false); // "en" != "en-*-US-*"
assert_eq!(li1.matches(&li2, true, true), true); // "en-*-*-*" == "en-*-US-*"Sourcepub fn variants(&self) -> impl ExactSizeIterator
pub fn variants(&self) -> impl ExactSizeIterator
Returns a vector of variants subtags of the LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let li1: LanguageIdentifier = "ca-ES-valencia".parse()
.expect("Parsing failed.");
assert_eq!(li1.variants().map(|v| v.as_str()).collect::<Vec<_>>(), &["valencia"]);
let li2: LanguageIdentifier = "de".parse()
.expect("Parsing failed.");
assert_eq!(li2.variants().len(), 0);Sourcepub fn set_variants(&mut self, variants: &[Variant])
pub fn set_variants(&mut self, variants: &[Variant])
Sets variant subtags of the LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES".parse()
.expect("Parsing failed.");
li.set_variants(&["valencia".parse().expect("Parsing failed.")]);
assert_eq!(li.to_string(), "ca-ES-valencia");Sourcepub fn has_variant(&self, variant: Variant) -> bool
pub fn has_variant(&self, variant: Variant) -> bool
Tests if a variant subtag is present in the LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES-macos".parse()
.expect("Parsing failed.");
assert_eq!(li.has_variant("valencia".parse().unwrap()), false);
assert_eq!(li.has_variant("macos".parse().unwrap()), true);Sourcepub fn clear_variants(&mut self)
pub fn clear_variants(&mut self)
Clears variant subtags of the LanguageIdentifier.
§Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "ca-ES-valencia".parse()
.expect("Parsing failed.");
li.clear_variants();
assert_eq!(li.to_string(), "ca-ES");Sourcepub fn maximize(&mut self) -> bool
pub fn maximize(&mut self) -> bool
Extends the LanguageIdentifier adding likely subtags based
on tables provided by CLDR.
§Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "en-US".parse()
.expect("Parsing failed.");
assert_eq!(li.maximize(), true);
assert_eq!(li.to_string(), "en-Latn-US");Sourcepub fn minimize(&mut self) -> bool
pub fn minimize(&mut self) -> bool
Extends the LanguageIdentifier removing likely subtags based
on tables provided by CLDR.
§Examples
use unic_langid_impl::LanguageIdentifier;
let mut li: LanguageIdentifier = "en-Latn-US".parse()
.expect("Parsing failed.");
assert_eq!(li.minimize(), true);
assert_eq!(li.to_string(), "en");Sourcepub fn character_direction(&self) -> CharacterDirection
pub fn character_direction(&self) -> CharacterDirection
Returns character direction of the LanguageIdentifier.
§Examples
use unic_langid_impl::{LanguageIdentifier, CharacterDirection};
let li1: LanguageIdentifier = "es-AR".parse()
.expect("Parsing failed.");
let li2: LanguageIdentifier = "fa".parse()
.expect("Parsing failed.");
assert_eq!(li1.character_direction(), CharacterDirection::LTR);
assert_eq!(li2.character_direction(), CharacterDirection::RTL);Trait Implementations§
Source§impl AsRef<LanguageIdentifier> for LanguageIdentifier
impl AsRef<LanguageIdentifier> for LanguageIdentifier
Source§fn as_ref(&self) -> &LanguageIdentifier
fn as_ref(&self) -> &LanguageIdentifier
Source§impl Clone for LanguageIdentifier
impl Clone for LanguageIdentifier
Source§fn clone(&self) -> LanguageIdentifier
fn clone(&self) -> LanguageIdentifier
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for LanguageIdentifier
impl Debug for LanguageIdentifier
Source§impl Default for LanguageIdentifier
impl Default for LanguageIdentifier
Source§fn default() -> LanguageIdentifier
fn default() -> LanguageIdentifier
Source§impl<'de> Deserialize<'de> for LanguageIdentifier
impl<'de> Deserialize<'de> for LanguageIdentifier
Source§fn deserialize<D>(
deserializer: D,
) -> Result<LanguageIdentifier, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<LanguageIdentifier, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Source§impl Display for LanguageIdentifier
impl Display for LanguageIdentifier
Source§impl FromStr for LanguageIdentifier
impl FromStr for LanguageIdentifier
Source§type Err = LanguageIdentifierError
type Err = LanguageIdentifierError
Source§fn from_str(
source: &str,
) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
fn from_str( source: &str, ) -> Result<LanguageIdentifier, <LanguageIdentifier as FromStr>::Err>
s to return a value of this type. Read moreSource§impl Hash for LanguageIdentifier
impl Hash for LanguageIdentifier
Source§impl Ord for LanguageIdentifier
impl Ord for LanguageIdentifier
Source§fn cmp(&self, other: &LanguageIdentifier) -> Ordering
fn cmp(&self, other: &LanguageIdentifier) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq<&str> for LanguageIdentifier
impl PartialEq<&str> for LanguageIdentifier
Source§impl PartialEq for LanguageIdentifier
impl PartialEq for LanguageIdentifier
Source§impl PartialOrd for LanguageIdentifier
impl PartialOrd for LanguageIdentifier
Source§impl Serialize for LanguageIdentifier
impl Serialize for LanguageIdentifier
Source§fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
fn serialize<S>(
&self,
serializer: S,
) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>where
S: Serializer,
impl Eq for LanguageIdentifier
impl StructuralPartialEq for LanguageIdentifier
Auto Trait Implementations§
impl Freeze for LanguageIdentifier
impl RefUnwindSafe for LanguageIdentifier
impl Send for LanguageIdentifier
impl Sync for LanguageIdentifier
impl Unpin for LanguageIdentifier
impl UnwindSafe for LanguageIdentifier
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.Source§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string() Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString. Read more