Enum Designator
#[non_exhaustive]pub enum Designator {
Verbose,
Short,
Compact,
HumanTime,
}
dep_jiff
and alloc
only.Expand description
Configuration for SpanPrinter::designator
.
This controls which kinds of designators to use when formatting a “friendly” duration. Generally, this only provides one axis of control: the length of each designator.
§Example
use jiff::{fmt::friendly::{Designator, SpanPrinter}, ToSpan};
let span = 1.year().months(2);
let printer = SpanPrinter::new();
assert_eq!(printer.span_to_string(&span), "1y 2mo");
let printer = SpanPrinter::new().designator(Designator::Short);
assert_eq!(printer.span_to_string(&span), "1yr 2mos");
let printer = SpanPrinter::new().designator(Designator::Verbose);
assert_eq!(printer.span_to_string(&span), "1year 2months");
let printer = SpanPrinter::new().designator(Designator::HumanTime);
assert_eq!(printer.span_to_string(&span), "1y 2months");
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Verbose
This writes out the full word of each unit designation. For example,
year
.
Short
This writes out a short but not minimal label for each unit. For
example, yr
for year
and yrs
for years
.
Compact
This writes out the shortest possible label for each unit that is still
generally recognizable. For example, y
. Note that in the compact
representation, and unlike the verbose and short representations, there
is no distinction between singular or plural.
HumanTime
A special mode that uses designator labels that are known to be
compatible with the humantime
crate.
None of Verbose
, Short
or Compact
are compatible with
humantime
.
Compact
is, on its own, nearly compatible. When using Compact
, all
designator labels are parsable by humantime
except for months and
microseconds. For months, Jiff uses mo
and mos
, but humantime
only parses months
, month
and M
. Jiff specifically doesn’t
support M
for months because of the confusability with minutes.
For microseconds, Jiff uses µs
which humantime
does not support
parsing.
Most of the designator labels Jiff uses for Short
aren’t supported
by humantime
. And even when they are, humantime
is inconsistent.
For example, humantime
supports sec
and secs
, but only nsec
and not nsecs
.
Finally, for Verbose
, humantime supports spelling out some units
in their entirety (e.g., seconds
) but not others (e.g., nanoseconds
is not supported by humantime
).
Therefore, this custom variant is provided so that designator labels
that are compatible with both Jiff and humantime
, even when there
isn’t a coherent concept otherwise connecting their style.
Trait Implementations§
§impl Clone for Designator
impl Clone for Designator
§fn clone(&self) -> Designator
fn clone(&self) -> Designator
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for Designator
impl Debug for Designator
impl Copy for Designator
Auto Trait Implementations§
impl Freeze for Designator
impl RefUnwindSafe for Designator
impl Send for Designator
impl Sync for Designator
impl Unpin for Designator
impl UnwindSafe for Designator
Blanket Implementations§
§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
§type ArchivedMetadata = ()
type ArchivedMetadata = ()
§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
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> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize ⓘ
fn byte_align(&self) -> usize ⓘ
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of_val(&self) -> usize ⓘ
fn mem_align_of_val(&self) -> usize ⓘ
Source§fn mem_size_of_val(&self) -> usize ⓘ
fn mem_size_of_val(&self) -> usize ⓘ
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§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> LayoutRaw for T
impl<T> LayoutRaw for T
§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError> ⓘ
§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out
indicating that a T
is niched.