Struct TimeWith
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§
§impl TimeWith
impl TimeWith
pub 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());pub 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);
pub 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);
pub 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);
pub 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.
Note that this only sets the millisecond component. It does
not change the microsecond or nanosecond components. To set
the fractional second component to nanosecond precision, use
TimeWith::subsec_nanosecond.
§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);
pub 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.
Note that this only sets the microsecond component. It does
not change the millisecond or nanosecond components. To set
the fractional second component to nanosecond precision, use
TimeWith::subsec_nanosecond.
§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);
pub 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.
Note that this only sets the nanosecond component. It does
not change the millisecond or microsecond components. To set
the fractional second component to nanosecond precision, use
TimeWith::subsec_nanosecond.
§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);
pub 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.
Note that this sets the entire fractional second component to
nanosecond precision, and overrides any individual millisecond,
microsecond or nanosecond settings. To set individual components,
use TimeWith::millisecond, TimeWith::microsecond or
TimeWith::nanosecond.
§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);
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TimeWith
impl RefUnwindSafe for TimeWith
impl Send for TimeWith
impl Sync for TimeWith
impl Unpin for TimeWith
impl UnwindSafe for TimeWith
Blanket Implementations§
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§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>
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);