Enum Spacing

#[non_exhaustive]
pub enum Spacing

Configuration for SpanPrinter::spacing.

This controls how much or how little whitespace is inserted into a "friendly" formatted duration. Typically, one wants less whitespace when using short unit designators (i.e., y instead of years), and more whitespace when using longer unit designators.

Example

use jiff::{
    fmt::friendly::{Designator, Spacing, SpanPrinter},
    ToSpan,
};

let span = 1.year().months(2);

// The default tries to balance spacing with compact
// unit designators.
let printer = SpanPrinter::new();
assert_eq!(printer.span_to_string(&span), "1y 2mo");

// But you can use slightly more descriptive
// designators without being too verbose.
let printer = SpanPrinter::new()
    .designator(Designator::Short);
assert_eq!(printer.span_to_string(&span), "1yr 2mos");

// When spacing is removed, it usually looks nicer
// to use compact unit designators.
let printer = SpanPrinter::new()
    .spacing(Spacing::None)
    .designator(Designator::Compact);
assert_eq!(printer.span_to_string(&span), "1y2mo");

// Conversely, when using more spacing, it usually
// looks nicer to use verbose unit designators.
let printer = SpanPrinter::new()
    .spacing(Spacing::BetweenUnitsAndDesignators)
    .designator(Designator::Verbose);
assert_eq!(printer.span_to_string(&span), "1 year 2 months");

Variants

None

Does not insert any ASCII whitespace.

Except in the case that SpanPrinter::hours_minutes_seconds is enabled and one is formatting a span with non-zero calendar units, then an ASCII whitespace is inserted between the calendar and non-calendar units even when Spacing::None is used.

BetweenUnits

Inserts one ASCII whitespace between the unit designator and the next unit value.

For example, 1year 2months.

BetweenUnitsAndDesignators

Inserts one ASCII whitespace between the unit value and the unit designator, in addition to inserting one ASCII whitespace between the unit designator and the next unit value.

For example, 1 year 2 months.

Trait Implementations

impl Clone for Spacing

fn clone(&self) -> Spacing

impl Copy for Spacing

impl Debug for Spacing

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Auto Trait Implementations

impl Freeze for Spacing

impl RefUnwindSafe for Spacing

impl Send for Spacing

impl Sync for Spacing

impl Unpin for Spacing

impl UnsafeUnpin for Spacing

impl UnwindSafe for Spacing

Blanket Implementations

impl<T> Any for Spacing where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Spacing where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Spacing where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

impl<T> CloneToUninit for Spacing where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for Spacing

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> ToOwned for Spacing where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T, U> Into<U> for Spacing where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for Spacing where U: Into<T>,

type Error = Infallible;
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto<U> for Spacing where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error;
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>