Struct SpanParser
pub struct SpanParser { /* private fields */ }
dep_jiff
and alloc
only.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));
Implementations§
§impl SpanParser
impl SpanParser
pub const fn new() -> SpanParser
pub const fn new() -> SpanParser
Create a new Temporal datetime printer with the default configuration.
pub fn parse_span<I>(&self, input: I) -> Result<Span, Error> ⓘ
pub fn parse_span<I>(&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());
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());
pub fn parse_duration<I>(&self, input: I) -> Result<SignedDuration, Error> ⓘ
pub fn parse_duration<I>(&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§
Auto Trait Implementations§
impl Freeze for SpanParser
impl RefUnwindSafe for SpanParser
impl Send for SpanParser
impl Sync for SpanParser
impl Unpin for SpanParser
impl UnwindSafe for SpanParser
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> 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.