Enum jumpy::prelude::fluent::types::FluentValue
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§
§impl<'source> FluentValue<'source>
impl<'source> FluentValue<'source>
pub 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())
);
pub fn matches<R, M>(
&self,
other: &FluentValue<'_>,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> boolwhere
R: Borrow<FluentResource>,
M: MemoizerKind,
pub fn matches<R, M>(
&self,
other: &FluentValue<'_>,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> boolwhere
R: Borrow<FluentResource>,
M: MemoizerKind,
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),);
pub 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
.
pub fn as_string<R, M>(
&self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>where
R: Borrow<FluentResource>,
M: MemoizerKind,
pub fn as_string<R, M>(
&self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>where
R: Borrow<FluentResource>,
M: MemoizerKind,
Converts the FluentValue
to a string.
Clones inner values when owned, borrowed data is not cloned.
Prefer using FluentValue::into_string()
when possible.
pub fn into_string<R, M>(
self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>where
R: Borrow<FluentResource>,
M: MemoizerKind,
pub fn into_string<R, M>(
self,
scope: &Scope<'_, '_, '_, '_, R, M>,
) -> Cow<'source, str>where
R: Borrow<FluentResource>,
M: MemoizerKind,
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§
§impl<'s> Clone for FluentValue<'s>
impl<'s> Clone for FluentValue<'s>
§fn clone(&self) -> FluentValue<'s>
fn clone(&self) -> FluentValue<'s>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl<'source> Debug for FluentValue<'source>
impl<'source> Debug for FluentValue<'source>
§impl<'source> From<&'source String> for FluentValue<'source>
impl<'source> From<&'source String> for FluentValue<'source>
§fn from(s: &'source String) -> FluentValue<'source>
fn from(s: &'source String) -> FluentValue<'source>
§impl From<&f32> for FluentValue<'_>
impl From<&f32> for FluentValue<'_>
§fn from(n: &f32) -> FluentValue<'_>
fn from(n: &f32) -> FluentValue<'_>
§impl From<&f64> for FluentValue<'_>
impl From<&f64> for FluentValue<'_>
§fn from(n: &f64) -> FluentValue<'_>
fn from(n: &f64) -> FluentValue<'_>
§impl From<&i128> for FluentValue<'_>
impl From<&i128> for FluentValue<'_>
§fn from(n: &i128) -> FluentValue<'_>
fn from(n: &i128) -> FluentValue<'_>
§impl From<&i16> for FluentValue<'_>
impl From<&i16> for FluentValue<'_>
§fn from(n: &i16) -> FluentValue<'_>
fn from(n: &i16) -> FluentValue<'_>
§impl From<&i32> for FluentValue<'_>
impl From<&i32> for FluentValue<'_>
§fn from(n: &i32) -> FluentValue<'_>
fn from(n: &i32) -> FluentValue<'_>
§impl From<&i64> for FluentValue<'_>
impl From<&i64> for FluentValue<'_>
§fn from(n: &i64) -> FluentValue<'_>
fn from(n: &i64) -> FluentValue<'_>
§impl From<&i8> for FluentValue<'_>
impl From<&i8> for FluentValue<'_>
§fn from(n: &i8) -> FluentValue<'_>
fn from(n: &i8) -> FluentValue<'_>
§impl From<&isize> for FluentValue<'_>
impl From<&isize> for FluentValue<'_>
§fn from(n: &isize) -> FluentValue<'_>
fn from(n: &isize) -> FluentValue<'_>
§impl<'source> From<&'source str> for FluentValue<'source>
impl<'source> From<&'source str> for FluentValue<'source>
§fn from(s: &'source str) -> FluentValue<'source>
fn from(s: &'source str) -> FluentValue<'source>
§impl From<&u128> for FluentValue<'_>
impl From<&u128> for FluentValue<'_>
§fn from(n: &u128) -> FluentValue<'_>
fn from(n: &u128) -> FluentValue<'_>
§impl From<&u16> for FluentValue<'_>
impl From<&u16> for FluentValue<'_>
§fn from(n: &u16) -> FluentValue<'_>
fn from(n: &u16) -> FluentValue<'_>
§impl From<&u32> for FluentValue<'_>
impl From<&u32> for FluentValue<'_>
§fn from(n: &u32) -> FluentValue<'_>
fn from(n: &u32) -> FluentValue<'_>
§impl From<&u64> for FluentValue<'_>
impl From<&u64> for FluentValue<'_>
§fn from(n: &u64) -> FluentValue<'_>
fn from(n: &u64) -> FluentValue<'_>
§impl From<&u8> for FluentValue<'_>
impl From<&u8> for FluentValue<'_>
§fn from(n: &u8) -> FluentValue<'_>
fn from(n: &u8) -> FluentValue<'_>
§impl From<&usize> for FluentValue<'_>
impl From<&usize> for FluentValue<'_>
§fn from(n: &usize) -> FluentValue<'_>
fn from(n: &usize) -> FluentValue<'_>
§impl<'source> From<Cow<'source, str>> for FluentValue<'source>
impl<'source> From<Cow<'source, str>> for FluentValue<'source>
§fn from(s: Cow<'source, str>) -> FluentValue<'source>
fn from(s: Cow<'source, str>) -> FluentValue<'source>
§impl<'l> From<FluentNumber> for FluentValue<'l>
impl<'l> From<FluentNumber> for FluentValue<'l>
§fn from(input: FluentNumber) -> FluentValue<'l>
fn from(input: FluentNumber) -> FluentValue<'l>
§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>>,
§fn from(v: Option<T>) -> FluentValue<'source>
fn from(v: Option<T>) -> FluentValue<'source>
§impl<'source> From<String> for FluentValue<'source>
impl<'source> From<String> for FluentValue<'source>
§fn from(s: String) -> FluentValue<'source>
fn from(s: String) -> FluentValue<'source>
§impl From<f32> for FluentValue<'_>
impl From<f32> for FluentValue<'_>
§fn from(n: f32) -> FluentValue<'_>
fn from(n: f32) -> FluentValue<'_>
§impl From<f64> for FluentValue<'_>
impl From<f64> for FluentValue<'_>
§fn from(n: f64) -> FluentValue<'_>
fn from(n: f64) -> FluentValue<'_>
§impl From<i128> for FluentValue<'_>
impl From<i128> for FluentValue<'_>
§fn from(n: i128) -> FluentValue<'_>
fn from(n: i128) -> FluentValue<'_>
§impl From<i16> for FluentValue<'_>
impl From<i16> for FluentValue<'_>
§fn from(n: i16) -> FluentValue<'_>
fn from(n: i16) -> FluentValue<'_>
§impl From<i32> for FluentValue<'_>
impl From<i32> for FluentValue<'_>
§fn from(n: i32) -> FluentValue<'_>
fn from(n: i32) -> FluentValue<'_>
§impl From<i64> for FluentValue<'_>
impl From<i64> for FluentValue<'_>
§fn from(n: i64) -> FluentValue<'_>
fn from(n: i64) -> FluentValue<'_>
§impl From<i8> for FluentValue<'_>
impl From<i8> for FluentValue<'_>
§fn from(n: i8) -> FluentValue<'_>
fn from(n: i8) -> FluentValue<'_>
§impl From<isize> for FluentValue<'_>
impl From<isize> for FluentValue<'_>
§fn from(n: isize) -> FluentValue<'_>
fn from(n: isize) -> FluentValue<'_>
§impl From<u128> for FluentValue<'_>
impl From<u128> for FluentValue<'_>
§fn from(n: u128) -> FluentValue<'_>
fn from(n: u128) -> FluentValue<'_>
§impl From<u16> for FluentValue<'_>
impl From<u16> for FluentValue<'_>
§fn from(n: u16) -> FluentValue<'_>
fn from(n: u16) -> FluentValue<'_>
§impl From<u32> for FluentValue<'_>
impl From<u32> for FluentValue<'_>
§fn from(n: u32) -> FluentValue<'_>
fn from(n: u32) -> FluentValue<'_>
§impl From<u64> for FluentValue<'_>
impl From<u64> for FluentValue<'_>
§fn from(n: u64) -> FluentValue<'_>
fn from(n: u64) -> FluentValue<'_>
§impl From<u8> for FluentValue<'_>
impl From<u8> for FluentValue<'_>
§fn from(n: u8) -> FluentValue<'_>
fn from(n: u8) -> FluentValue<'_>
§impl From<usize> for FluentValue<'_>
impl From<usize> for FluentValue<'_>
§fn from(n: usize) -> FluentValue<'_>
fn from(n: usize) -> FluentValue<'_>
§impl<'s> PartialEq for FluentValue<'s>
impl<'s> PartialEq for FluentValue<'s>
§fn eq(&self, other: &FluentValue<'s>) -> bool
fn eq(&self, other: &FluentValue<'s>) -> bool
self
and other
values to be equal, and is used
by ==
.Auto Trait Implementations§
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§
§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T
[ShaderType
] for self
. When used in [AsBindGroup
]
derives, it is safe to assume that all images in self
exist.§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.