pub struct TimeWith { /* private fields */ }
Expand description
A builder for setting the fields on a Time
.
This builder is constructed via Time::with
.
§Example
Unlike Date
, a Time
is valid for all possible valid values of its
fields. That is, there is no way for two valid field values to combine
into an invalid Time
. So, for Time
, this builder does have as much of
a benefit versus an API design with methods like Time::with_hour
and
Time::with_minute
. Nevertheless, this builder permits settings multiple
fields at the same time and performing only one validity check. Moreover,
this provides a consistent API with other date and time types in this
crate.
use jiff::civil::time;
let t1 = time(0, 0, 24, 0);
let t2 = t1.with().hour(15).minute(30).millisecond(10).build()?;
assert_eq!(t2, time(15, 30, 24, 10_000_000));
Implementations§
Source§impl TimeWith
impl TimeWith
Sourcepub fn build(self) -> Result<Time, Error>
pub fn build(self) -> Result<Time, Error>
Create a new Time
from the fields set on this configuration.
An error occurs when the fields combine to an invalid time. This only
occurs when at least one field has an invalid value, or if at least
one of millisecond
, microsecond
or nanosecond
is set and
subsec_nanosecond
is set. Otherwise, if all fields are valid, then
the entire Time
is guaranteed to be valid.
For any fields not set on this configuration, the values are taken from
the Time
that originally created this configuration. When no values
are set, this routine is guaranteed to succeed and will always return
the original time without modification.
§Example
This creates a time but with its fractional nanosecond component stripped:
use jiff::civil::time;
let t = time(14, 27, 30, 123_456_789);
assert_eq!(t.with().subsec_nanosecond(0).build()?, time(14, 27, 30, 0));
§Example: error for invalid time
use jiff::civil::time;
let t = time(14, 27, 30, 0);
assert!(t.with().hour(24).build().is_err());
§Example: error for ambiguous sub-second value
use jiff::civil::time;
let t = time(14, 27, 30, 123_456_789);
// Setting both the individual sub-second fields and the entire
// fractional component could lead to a misleading configuration. So
// if it's done, it results in an error in all cases. Callers must
// choose one or the other.
assert!(t.with().microsecond(1).subsec_nanosecond(0).build().is_err());
Sourcepub fn hour(self, hour: i8) -> TimeWith
pub fn hour(self, hour: i8) -> TimeWith
Set the hour field on a Time
.
One can access this value via Time::hour
.
This overrides any previous hour settings.
§Errors
This returns an error when TimeWith::build
is called if the given
hour is outside the range 0..=23
.
§Example
use jiff::civil::time;
let t1 = time(15, 21, 59, 0);
assert_eq!(t1.hour(), 15);
let t2 = t1.with().hour(3).build()?;
assert_eq!(t2.hour(), 3);
Sourcepub fn minute(self, minute: i8) -> TimeWith
pub fn minute(self, minute: i8) -> TimeWith
Set the minute field on a Time
.
One can access this value via Time::minute
.
This overrides any previous minute settings.
§Errors
This returns an error when TimeWith::build
is called if the given
minute is outside the range 0..=59
.
§Example
use jiff::civil::time;
let t1 = time(15, 21, 59, 0);
assert_eq!(t1.minute(), 21);
let t2 = t1.with().minute(3).build()?;
assert_eq!(t2.minute(), 3);
Sourcepub fn second(self, second: i8) -> TimeWith
pub fn second(self, second: i8) -> TimeWith
Set the second field on a Time
.
One can access this value via Time::second
.
This overrides any previous second settings.
§Errors
This returns an error when TimeWith::build
is called if the given
second is outside the range 0..=59
.
§Example
use jiff::civil::time;
let t1 = time(15, 21, 59, 0);
assert_eq!(t1.second(), 59);
let t2 = t1.with().second(3).build()?;
assert_eq!(t2.second(), 3);
Sourcepub fn millisecond(self, millisecond: i16) -> TimeWith
pub fn millisecond(self, millisecond: i16) -> TimeWith
Set the millisecond field on a Time
.
One can access this value via Time::millisecond
.
This overrides any previous millisecond settings.
§Errors
This returns an error when TimeWith::build
is called if the given
millisecond is outside the range 0..=999
, or if both this and
TimeWith::subsec_nanosecond
are set.
§Example
This shows the relationship between Time::millisecond
and
Time::subsec_nanosecond
:
use jiff::civil::time;
let t = time(15, 21, 35, 0).with().millisecond(123).build()?;
assert_eq!(t.subsec_nanosecond(), 123_000_000);
Sourcepub fn microsecond(self, microsecond: i16) -> TimeWith
pub fn microsecond(self, microsecond: i16) -> TimeWith
Set the microsecond field on a Time
.
One can access this value via Time::microsecond
.
This overrides any previous microsecond settings.
§Errors
This returns an error when TimeWith::build
is called if the given
microsecond is outside the range 0..=999
, or if both this and
TimeWith::subsec_nanosecond
are set.
§Example
This shows the relationship between Time::microsecond
and
Time::subsec_nanosecond
:
use jiff::civil::time;
let t = time(15, 21, 35, 0).with().microsecond(123).build()?;
assert_eq!(t.subsec_nanosecond(), 123_000);
Sourcepub fn nanosecond(self, nanosecond: i16) -> TimeWith
pub fn nanosecond(self, nanosecond: i16) -> TimeWith
Set the nanosecond field on a Time
.
One can access this value via Time::nanosecond
.
This overrides any previous nanosecond settings.
§Errors
This returns an error when TimeWith::build
is called if the given
nanosecond is outside the range 0..=999
, or if both this and
TimeWith::subsec_nanosecond
are set.
§Example
This shows the relationship between Time::nanosecond
and
Time::subsec_nanosecond
:
use jiff::civil::time;
let t = time(15, 21, 35, 0).with().nanosecond(123).build()?;
assert_eq!(t.subsec_nanosecond(), 123);
Sourcepub fn subsec_nanosecond(self, subsec_nanosecond: i32) -> TimeWith
pub fn subsec_nanosecond(self, subsec_nanosecond: i32) -> TimeWith
Set the subsecond nanosecond field on a Time
.
If you want to access this value on Time
, then use
Time::subsec_nanosecond
.
This overrides any previous subsecond nanosecond settings.
§Errors
This returns an error when TimeWith::build
is called if the given
subsecond nanosecond is outside the range 0..=999,999,999
, or if both
this and one of TimeWith::millisecond
, TimeWith::microsecond
or
TimeWith::nanosecond
are set.
§Example
This shows the relationship between constructing a Time
value with
subsecond nanoseconds and its individual subsecond fields:
use jiff::civil::time;
let t1 = time(15, 21, 35, 0);
let t2 = t1.with().subsec_nanosecond(123_456_789).build()?;
assert_eq!(t2.millisecond(), 123);
assert_eq!(t2.microsecond(), 456);
assert_eq!(t2.nanosecond(), 789);