pub enum FluentValue<'source> {
String(Cow<'source, str>),
Number(FluentNumber),
Custom(Box<dyn FluentType + Send>),
None,
Error,
}
Expand description
The FluentValue
enum represents values which can be formatted to a String.
Those values are either passed as arguments to FluentBundle::format_pattern
or
produced by functions, or generated in the process of pattern resolution.
Variants§
Implementations§
source§impl<'source> FluentValue<'source>
impl<'source> FluentValue<'source>
sourcepub fn try_number(value: &'source str) -> FluentValue<'source>
pub fn try_number(value: &'source str) -> FluentValue<'source>
Attempts to parse the string representation of a value
that supports
ToString
into a FluentValue::Number
. If it fails, it will instead
convert it to a FluentValue::String
.
use fluent_bundle::types::{FluentNumber, FluentNumberOptions, FluentValue};
// "2" parses into a `FluentNumber`
assert_eq!(
FluentValue::try_number("2"),
FluentValue::Number(FluentNumber::new(2.0, FluentNumberOptions::default()))
);
// Floats can be parsed as well.
assert_eq!(
FluentValue::try_number("3.141569"),
FluentValue::Number(FluentNumber::new(
3.141569,
FluentNumberOptions {
minimum_fraction_digits: Some(6),
..Default::default()
}
))
);
// When a value is not a valid number, it falls back to a `FluentValue::String`
assert_eq!(
FluentValue::try_number("A string"),
FluentValue::String("A string".into())
);
sourcepub fn matches<R, M>(
&self,
other: &FluentValue<'_>,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> bool
pub fn matches<R, M>( &self, other: &FluentValue<'_>, scope: &Scope<'_, '_, '_, '_, R, M>, ) -> bool
Checks to see if two FluentValues
match each other by having the
same type and contents. The special exception is in the case of a string being
compared to a number. Here attempt to check that the plural rule category matches.
use fluent_bundle::resolver::Scope;
use fluent_bundle::{types::FluentValue, FluentBundle, FluentResource};
use unic_langid::langid;
let langid_ars = langid!("en");
let bundle: FluentBundle<FluentResource> = FluentBundle::new(vec![langid_ars]);
let scope = Scope::new(&bundle, None, None);
// Matching examples:
assert!(FluentValue::try_number("2").matches(&FluentValue::try_number("2"), &scope));
assert!(FluentValue::from("fluent").matches(&FluentValue::from("fluent"), &scope));
assert!(
FluentValue::from("one").matches(&FluentValue::try_number("1"), &scope),
"Plural rules are matched."
);
// Non-matching examples:
assert!(!FluentValue::try_number("2").matches(&FluentValue::try_number("3"), &scope));
assert!(!FluentValue::from("fluent").matches(&FluentValue::from("not fluent"), &scope));
assert!(!FluentValue::from("two").matches(&FluentValue::try_number("100"), &scope),);
sourcepub fn write<W, R, M>(
&self,
w: &mut W,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Result<(), Error>
pub fn write<W, R, M>( &self, w: &mut W, scope: &Scope<'_, '_, '_, '_, R, M>, ) -> Result<(), Error>
Write out a string version of the FluentValue
to W
.
sourcepub fn as_string<R, M>(
&self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>
pub fn as_string<R, M>( &self, scope: &Scope<'_, '_, '_, '_, R, M>, ) -> Cow<'source, str>
Converts the FluentValue
to a string.
Clones inner values when owned, borrowed data is not cloned.
Prefer using FluentValue::into_string()
when possible.
sourcepub fn into_string<R, M>(
self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>
pub fn into_string<R, M>( self, scope: &Scope<'_, '_, '_, '_, R, M>, ) -> Cow<'source, str>
Converts the FluentValue
to a string.
Takes self by-value to be able to skip expensive clones.
Prefer this method over FluentValue::as_string()
when possible.
pub fn into_owned<'a>(&self) -> FluentValue<'a>
Trait Implementations§
source§impl<'s> Clone for FluentValue<'s>
impl<'s> Clone for FluentValue<'s>
source§fn clone(&self) -> FluentValue<'s>
fn clone(&self) -> FluentValue<'s>
source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl<'source> Debug for FluentValue<'source>
impl<'source> Debug for FluentValue<'source>
source§impl<'source> From<&'source String> for FluentValue<'source>
impl<'source> From<&'source String> for FluentValue<'source>
source§fn from(s: &'source String) -> FluentValue<'source>
fn from(s: &'source String) -> FluentValue<'source>
source§impl From<&f32> for FluentValue<'_>
impl From<&f32> for FluentValue<'_>
source§fn from(n: &f32) -> FluentValue<'_>
fn from(n: &f32) -> FluentValue<'_>
source§impl From<&f64> for FluentValue<'_>
impl From<&f64> for FluentValue<'_>
source§fn from(n: &f64) -> FluentValue<'_>
fn from(n: &f64) -> FluentValue<'_>
source§impl From<&i128> for FluentValue<'_>
impl From<&i128> for FluentValue<'_>
source§fn from(n: &i128) -> FluentValue<'_>
fn from(n: &i128) -> FluentValue<'_>
source§impl From<&i16> for FluentValue<'_>
impl From<&i16> for FluentValue<'_>
source§fn from(n: &i16) -> FluentValue<'_>
fn from(n: &i16) -> FluentValue<'_>
source§impl From<&i32> for FluentValue<'_>
impl From<&i32> for FluentValue<'_>
source§fn from(n: &i32) -> FluentValue<'_>
fn from(n: &i32) -> FluentValue<'_>
source§impl From<&i64> for FluentValue<'_>
impl From<&i64> for FluentValue<'_>
source§fn from(n: &i64) -> FluentValue<'_>
fn from(n: &i64) -> FluentValue<'_>
source§impl From<&i8> for FluentValue<'_>
impl From<&i8> for FluentValue<'_>
source§fn from(n: &i8) -> FluentValue<'_>
fn from(n: &i8) -> FluentValue<'_>
source§impl From<&isize> for FluentValue<'_>
impl From<&isize> for FluentValue<'_>
source§fn from(n: &isize) -> FluentValue<'_>
fn from(n: &isize) -> FluentValue<'_>
source§impl<'source> From<&'source str> for FluentValue<'source>
impl<'source> From<&'source str> for FluentValue<'source>
source§fn from(s: &'source str) -> FluentValue<'source>
fn from(s: &'source str) -> FluentValue<'source>
source§impl From<&u128> for FluentValue<'_>
impl From<&u128> for FluentValue<'_>
source§fn from(n: &u128) -> FluentValue<'_>
fn from(n: &u128) -> FluentValue<'_>
source§impl From<&u16> for FluentValue<'_>
impl From<&u16> for FluentValue<'_>
source§fn from(n: &u16) -> FluentValue<'_>
fn from(n: &u16) -> FluentValue<'_>
source§impl From<&u32> for FluentValue<'_>
impl From<&u32> for FluentValue<'_>
source§fn from(n: &u32) -> FluentValue<'_>
fn from(n: &u32) -> FluentValue<'_>
source§impl From<&u64> for FluentValue<'_>
impl From<&u64> for FluentValue<'_>
source§fn from(n: &u64) -> FluentValue<'_>
fn from(n: &u64) -> FluentValue<'_>
source§impl From<&u8> for FluentValue<'_>
impl From<&u8> for FluentValue<'_>
source§fn from(n: &u8) -> FluentValue<'_>
fn from(n: &u8) -> FluentValue<'_>
source§impl From<&usize> for FluentValue<'_>
impl From<&usize> for FluentValue<'_>
source§fn from(n: &usize) -> FluentValue<'_>
fn from(n: &usize) -> FluentValue<'_>
source§impl<'l> From<FluentNumber> for FluentValue<'l>
impl<'l> From<FluentNumber> for FluentValue<'l>
source§fn from(input: FluentNumber) -> FluentValue<'l>
fn from(input: FluentNumber) -> FluentValue<'l>
source§impl<'source, T> From<Option<T>> for FluentValue<'source>where
T: Into<FluentValue<'source>>,
impl<'source, T> From<Option<T>> for FluentValue<'source>where
T: Into<FluentValue<'source>>,
source§fn from(v: Option<T>) -> FluentValue<'source>
fn from(v: Option<T>) -> FluentValue<'source>
source§impl<'source> From<String> for FluentValue<'source>
impl<'source> From<String> for FluentValue<'source>
source§fn from(s: String) -> FluentValue<'source>
fn from(s: String) -> FluentValue<'source>
source§impl From<f32> for FluentValue<'_>
impl From<f32> for FluentValue<'_>
source§fn from(n: f32) -> FluentValue<'_>
fn from(n: f32) -> FluentValue<'_>
source§impl From<f64> for FluentValue<'_>
impl From<f64> for FluentValue<'_>
source§fn from(n: f64) -> FluentValue<'_>
fn from(n: f64) -> FluentValue<'_>
source§impl From<i128> for FluentValue<'_>
impl From<i128> for FluentValue<'_>
source§fn from(n: i128) -> FluentValue<'_>
fn from(n: i128) -> FluentValue<'_>
source§impl From<i16> for FluentValue<'_>
impl From<i16> for FluentValue<'_>
source§fn from(n: i16) -> FluentValue<'_>
fn from(n: i16) -> FluentValue<'_>
source§impl From<i32> for FluentValue<'_>
impl From<i32> for FluentValue<'_>
source§fn from(n: i32) -> FluentValue<'_>
fn from(n: i32) -> FluentValue<'_>
source§impl From<i64> for FluentValue<'_>
impl From<i64> for FluentValue<'_>
source§fn from(n: i64) -> FluentValue<'_>
fn from(n: i64) -> FluentValue<'_>
source§impl From<i8> for FluentValue<'_>
impl From<i8> for FluentValue<'_>
source§fn from(n: i8) -> FluentValue<'_>
fn from(n: i8) -> FluentValue<'_>
source§impl From<isize> for FluentValue<'_>
impl From<isize> for FluentValue<'_>
source§fn from(n: isize) -> FluentValue<'_>
fn from(n: isize) -> FluentValue<'_>
source§impl From<u128> for FluentValue<'_>
impl From<u128> for FluentValue<'_>
source§fn from(n: u128) -> FluentValue<'_>
fn from(n: u128) -> FluentValue<'_>
source§impl From<u16> for FluentValue<'_>
impl From<u16> for FluentValue<'_>
source§fn from(n: u16) -> FluentValue<'_>
fn from(n: u16) -> FluentValue<'_>
source§impl From<u32> for FluentValue<'_>
impl From<u32> for FluentValue<'_>
source§fn from(n: u32) -> FluentValue<'_>
fn from(n: u32) -> FluentValue<'_>
source§impl From<u64> for FluentValue<'_>
impl From<u64> for FluentValue<'_>
source§fn from(n: u64) -> FluentValue<'_>
fn from(n: u64) -> FluentValue<'_>
source§impl From<u8> for FluentValue<'_>
impl From<u8> for FluentValue<'_>
source§fn from(n: u8) -> FluentValue<'_>
fn from(n: u8) -> FluentValue<'_>
source§impl From<usize> for FluentValue<'_>
impl From<usize> for FluentValue<'_>
source§fn from(n: usize) -> FluentValue<'_>
fn from(n: usize) -> FluentValue<'_>
source§impl<'s> PartialEq for FluentValue<'s>
impl<'s> PartialEq for FluentValue<'s>
Auto Trait Implementations§
impl<'source> !DynSend for FluentValue<'source>
impl<'source> !DynSync for FluentValue<'source>
impl<'source> Freeze for FluentValue<'source>
impl<'source> !RefUnwindSafe for FluentValue<'source>
impl<'source> Send for FluentValue<'source>
impl<'source> !Sync for FluentValue<'source>
impl<'source> Unpin for FluentValue<'source>
impl<'source> !UnwindSafe for FluentValue<'source>
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> Filterable for T
impl<T> Filterable for T
source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 120 bytes
Size for each variant:
String
: 32 bytesNumber
: 120 bytesCustom
: 24 bytesNone
: 0 bytesError
: 0 bytes