Struct SpanPrinter
struct SpanPrinter { ... }
A printer for Temporal durations.
Note that in Jiff, a "Temporal duration" is called a "span."
This printer converts an in memory representation of a duration of time
to a machine (but also human) readable format. Using this printer,
one can convert a Span to a string. Note that a Span provides a
Display trait implementation that utilize the
default configuration of this printer. However, this printer can print
directly to anything that implements the fmt::Write trait.
See the fmt::temporal module documentation for
more information on the specific format used.
Example
This is a basic example showing how to print a Span directly to a
Vec<u8>.
use ;
// A printer can be created in a const context.
const PRINTER: SpanPrinter = new;
let span = 48.minutes;
let mut buf = vec!;
// Printing to a `Vec<u8>` can never fail.
PRINTER.print_span.unwrap;
assert_eq!;
Example: using adapters with std::io::Write and std::fmt::Write
By using the StdIoWrite and
StdFmtWrite adapters, one can print spans
directly to implementations of std::io::Write and std::fmt::Write,
respectively. The example below demonstrates writing to anything
that implements std::io::Write. Similar code can be written for
std::fmt::Write.
use std::{fs::File, io::{BufWriter, Write}, path::Path};
use jiff::{fmt::{StdIoWrite, temporal::SpanPrinter}, ToSpan};
let span = 48.minutes();
let path = Path::new("/tmp/output");
let mut file = BufWriter::new(File::create(path)?);
SpanPrinter::new().print_span(&span, StdIoWrite(&mut file)).unwrap();
file.flush()?;
assert_eq!(std::fs::read_to_string(path)?, "PT48m");
# Ok::<(), Box<dyn std::error::Error>>(())
Implementations
impl SpanPrinter
const fn new() -> SpanPrinterCreate a new Temporal span printer with the default configuration.
const fn lowercase(self: Self, yes: bool) -> SpanPrinterUse lowercase for unit designator labels.
By default, unit designator labels are written in uppercase.
Example
This shows the difference between the default (uppercase) and enabling lowercase. Lowercase unit designator labels tend to be easier to read (in this author's opinion), but they aren't as broadly supported since they are an extension to ISO 8601.
use ; let span = 5.years.days.hours; let printer = new; assert_eq!; assert_eq!;fn span_to_string(self: &Self, span: &Span) -> alloc::string::StringFormat a
Spaninto a string.This is a convenience routine for
SpanPrinter::print_spanwith aString.Example
use ; const PRINTER: SpanPrinter = new; let span = 3.years.months; assert_eq!; # Ok::fn duration_to_string(self: &Self, duration: &SignedDuration) -> alloc::string::StringFormat a
SignedDurationinto a string.This balances the units of the duration up to at most hours automatically.
This is a convenience routine for
SpanPrinter::print_durationwith aString.Example
use ; const PRINTER: SpanPrinter = new; let dur = new; assert_eq!; assert_eq!; # Ok::fn print_span<W: Write>(self: &Self, span: &Span, wtr: W) -> Result<(), Error>Print a
Spanto the given writer.Errors
This only returns an error when writing to the given
Writeimplementation would fail. Some such implementations, like forStringandVec<u8>, never fail (unless memory allocation fails). In such cases, it would be appropriate to callunwrap()on the result.Example
use ; const PRINTER: SpanPrinter = new; let span = 3.years.months; let mut buf = Stringnew; // Printing to a `String` can never fail. PRINTER.print_span.unwrap; assert_eq!; # Ok::fn print_duration<W: Write>(self: &Self, duration: &SignedDuration, wtr: W) -> Result<(), Error>Print a
SignedDurationto the given writer.This balances the units of the duration up to at most hours automatically.
Errors
This only returns an error when writing to the given
Writeimplementation would fail. Some such implementations, like forStringandVec<u8>, never fail (unless memory allocation fails). In such cases, it would be appropriate to callunwrap()on the result.Example
use ; const PRINTER: SpanPrinter = new; let dur = new; let mut buf = Stringnew; // Printing to a `String` can never fail. PRINTER.print_duration.unwrap; assert_eq!; // Negative durations are supported. buf.clear; PRINTER.print_duration.unwrap; assert_eq!; # Ok::
impl Debug for SpanPrinter
fn fmt(self: &Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl Freeze for SpanPrinter
impl RefUnwindSafe for SpanPrinter
impl Send for SpanPrinter
impl Sync for SpanPrinter
impl Unpin for SpanPrinter
impl UnwindSafe for SpanPrinter
impl<T> Any for SpanPrinter
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for SpanPrinter
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for SpanPrinter
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> From for SpanPrinter
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into for SpanPrinter
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for SpanPrinter
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for SpanPrinter
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>