jiff::fmt::temporal

Struct SpanParser

Source
pub struct SpanParser { /* private fields */ }
Expand description

A parser for Temporal durations.

Note that in Jiff, a “Temporal duration” is called a “span.”

See the fmt::temporal module documentation for more information on the specific format used.

§Example

This example shows how to parse a Span from a byte string. (That is, &[u8] and not a &str.)

use jiff::{fmt::temporal::SpanParser, ToSpan};

// A parser can be created in a const context.
static PARSER: SpanParser = SpanParser::new();

let span = PARSER.parse_span(b"P3y7m25dT7h36m")?;
assert_eq!(
    span,
    3.years().months(7).days(25).hours(7).minutes(36).fieldwise(),
);

Implementations§

Source§

impl SpanParser

Source

pub const fn new() -> SpanParser

Create a new Temporal datetime printer with the default configuration.

Source

pub fn parse_span<I: AsRef<[u8]>>(&self, input: I) -> Result<Span, Error>

Parse a span string into a Span value.

§Errors

This returns an error if the span string given is invalid or if it is valid but doesn’t fit in the span range supported by Jiff.

§Example

This shows a basic example of using this routine.

use jiff::{fmt::temporal::SpanParser, ToSpan};

static PARSER: SpanParser = SpanParser::new();

let span = PARSER.parse_span(b"PT48m")?;
assert_eq!(span, 48.minutes().fieldwise());

Note that unless you need to parse a span from a byte string, at time of writing, there is no other advantage to using this parser directly. It is likely more convenient to just use the FromStr trait implementation on Span:

use jiff::{Span, ToSpan};

let span = "PT48m".parse::<Span>()?;
assert_eq!(span, 48.minutes().fieldwise());
Source

pub fn parse_duration<I: AsRef<[u8]>>( &self, input: I, ) -> Result<SignedDuration, Error>

Parse an ISO 8601 duration string into a SignedDuration value.

§Errors

This returns an error if the span string given is invalid or if it is valid but can’t be converted to a SignedDuration. This can occur when the parsed time exceeds the minimum and maximum SignedDuration values, or if there are any non-zero units greater than hours.

§Example

This shows a basic example of using this routine.

use jiff::{fmt::temporal::SpanParser, SignedDuration};

static PARSER: SpanParser = SpanParser::new();

let duration = PARSER.parse_duration(b"PT48m")?;
assert_eq!(duration, SignedDuration::from_mins(48));

Note that unless you need to parse a span from a byte string, at time of writing, there is no other advantage to using this parser directly. It is likely more convenient to just use the FromStr trait implementation on SignedDuration:

use jiff::SignedDuration;

let duration = "PT48m".parse::<SignedDuration>()?;
assert_eq!(duration, SignedDuration::from_mins(48));

Trait Implementations§

Source§

impl Debug for SpanParser

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

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

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.