Struct SpanParser
struct SpanParser { ... }
A parser for Jiff's "friendly" duration format.
See the module documentation for more details on the precise format supported by this parser.
Unlike SpanPrinter, this parser doesn't have any
configuration knobs. While it may grow some in the future, the approach
taken here is for the parser to support the entire grammar. That is, the
parser can parse anything emitted by SpanPrinter. (And indeed, the
parser can even handle things that the printer can't emit due to lack of
configurability. For example, 1hour1m is a valid friendly duration,
but SpanPrinter cannot emit it due to a mixing of verbose and compact
designator labels.)
Advice
Since this parser has no configuration, there are generally only two reasons why you might want to use this type specifically:
- You need to parse from
&[u8]. - You need to parse only the "friendly" format.
Otherwise, you can use the FromStr implementations on both Span and
SignedDuration, which automatically support the friendly format in
addition to the ISO 8601 format simultaneously:
use ;
let span: Span = "5 years, 2 months".parse?;
assert_eq!;
let sdur: SignedDuration = "5 hours, 2 minutes".parse?;
assert_eq!;
# Ok::
Example
This example shows how to parse a Span directly from &str:
use ;
static PARSER: SpanParser = new;
let string = "1 year, 3 months, 15:00:01.3";
let span = PARSER.parse_span?;
assert_eq!;
// Negative durations are supported too!
let string = "1 year, 3 months, 15:00:01.3 ago";
let span = PARSER.parse_span?;
assert_eq!;
# Ok::
Implementations
impl SpanParser
const fn new() -> SpanParserCreates a new parser for the "friendly" duration format.
The parser returned uses the default configuration. (Although, at time of writing, there are no available configuration options for this parser.) This is identical to
SpanParser::default, but it can be used in aconstcontext.Example
This example shows how to parse a
Spandirectly from&[u8]:use ; static PARSER: SpanParser = new; let bytes = b"1 year 3 months 15 hours 1300ms"; let span = PARSER.parse_span?; assert_eq!; # Ok::fn parse_span<I: AsRef<[u8]>>(self: &Self, input: I) -> Result<Span, Error>Run the parser on the given string (which may be plain bytes) and, if successful, return the parsed
Span.See the module documentation for more details on the specific grammar supported by this parser.
Example
This shows a number of different duration formats that can be parsed into a
Span:use ; let spans = ; static PARSER: SpanParser = new; for in spans # Ok::fn parse_duration<I: AsRef<[u8]>>(self: &Self, input: I) -> Result<SignedDuration, Error>Run the parser on the given string (which may be plain bytes) and, if successful, return the parsed
SignedDuration.See the module documentation for more details on the specific grammar supported by this parser.
Example
This shows a number of different duration formats that can be parsed into a
SignedDuration:use ; let durations = ; static PARSER: SpanParser = new; for in durations # Ok::
impl Clone for SpanParser
fn clone(self: &Self) -> SpanParser
impl Debug for SpanParser
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl Default for SpanParser
fn default() -> SpanParser
impl Freeze for SpanParser
impl RefUnwindSafe for SpanParser
impl Send for SpanParser
impl Sync for SpanParser
impl Unpin for SpanParser
impl UnsafeUnpin for SpanParser
impl UnwindSafe for SpanParser
impl<T> Any for SpanParser
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for SpanParser
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for SpanParser
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for SpanParser
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for SpanParser
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for SpanParser
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for SpanParser
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 SpanParser
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for SpanParser
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>