DateWith

Struct DateWith 

pub struct DateWith { /* private fields */ }
Expand description

A builder for setting the fields on a Date.

This builder is constructed via Date::with.

§Example

The builder ensures one can chain together the individual components of a date without it failing at an intermediate step. For example, if you had a date of 2024-10-31 and wanted to change both the day and the month, and each setting was validated independent of the other, you would need to be careful to set the day first and then the month. In some cases, you would need to set the month first and then the day!

But with the builder, you can set values in any order:

use jiff::civil::date;

let d1 = date(2024, 10, 31);
let d2 = d1.with().month(11).day(30).build()?;
assert_eq!(d2, date(2024, 11, 30));

let d1 = date(2024, 4, 30);
let d2 = d1.with().day(31).month(7).build()?;
assert_eq!(d2, date(2024, 7, 31));

Implementations§

§

impl DateWith

pub fn build(self) -> Result<Date, Error>

Create a new Date from the fields set on this configuration.

An error occurs when the fields combine to an invalid date.

For any fields not set on this configuration, the values are taken from the Date that originally created this configuration. When no values are set, this routine is guaranteed to succeed and will always return the original date without modification.

§Example

This creates a date corresponding to the last day in the year:

use jiff::civil::date;

assert_eq!(
    date(2023, 1, 1).with().day_of_year_no_leap(365).build()?,
    date(2023, 12, 31),
);
// It also works with leap years for the same input:
assert_eq!(
    date(2024, 1, 1).with().day_of_year_no_leap(365).build()?,
    date(2024, 12, 31),
);
§Example: error for invalid date

If the fields combine to form an invalid date, then an error is returned:

use jiff::civil::date;

let d = date(2024, 11, 30);
assert!(d.with().day(31).build().is_err());

let d = date(2024, 2, 29);
assert!(d.with().year(2023).build().is_err());

pub fn year(self, year: i16) -> DateWith

Set the year field on a Date.

One can access this value via Date::year.

This overrides any previous year settings.

§Errors

This returns an error when DateWith::build is called if the given year is outside the range -9999..=9999. This can also return an error if the resulting date is otherwise invalid.

§Example

This shows how to create a new date with a different year:

use jiff::civil::date;

let d1 = date(2005, 11, 5);
assert_eq!(d1.year(), 2005);
let d2 = d1.with().year(2007).build()?;
assert_eq!(d2.year(), 2007);
§Example: only changing the year can fail

For example, while 2024-02-29 is valid, 2023-02-29 is not:

use jiff::civil::date;

let d1 = date(2024, 2, 29);
assert!(d1.with().year(2023).build().is_err());

pub fn era_year(self, year: i16, era: Era) -> DateWith

Set year of a date via its era and its non-negative numeric component.

One can access this value via Date::era_year.

§Errors

This returns an error when DateWith::build is called if the year is outside the range for the era specified. For Era::BCE, the range is 1..=10000. For Era::CE, the range is 1..=9999.

§Example

This shows that CE years are equivalent to the years used by this crate:

use jiff::civil::{Era, date};

let d1 = date(2005, 11, 5);
assert_eq!(d1.year(), 2005);
let d2 = d1.with().era_year(2007, Era::CE).build()?;
assert_eq!(d2.year(), 2007);

// CE years are always positive and can be at most 9999:
assert!(d1.with().era_year(-5, Era::CE).build().is_err());
assert!(d1.with().era_year(10_000, Era::CE).build().is_err());

But BCE years always correspond to years less than or equal to 0 in this crate:

use jiff::civil::{Era, date};

let d1 = date(-27, 7, 1);
assert_eq!(d1.year(), -27);
assert_eq!(d1.era_year(), (28, Era::BCE));

let d2 = d1.with().era_year(509, Era::BCE).build()?;
assert_eq!(d2.year(), -508);
assert_eq!(d2.era_year(), (509, Era::BCE));

let d2 = d1.with().era_year(10_000, Era::BCE).build()?;
assert_eq!(d2.year(), -9_999);
assert_eq!(d2.era_year(), (10_000, Era::BCE));

// BCE years are always positive and can be at most 10000:
assert!(d1.with().era_year(-5, Era::BCE).build().is_err());
assert!(d1.with().era_year(10_001, Era::BCE).build().is_err());
§Example: overrides DateWith::year

Setting this option will override any previous DateWith::year option:

use jiff::civil::{Era, date};

let d1 = date(2024, 7, 2);
let d2 = d1.with().year(2000).era_year(1900, Era::CE).build()?;
assert_eq!(d2, date(1900, 7, 2));

Similarly, DateWith::year will override any previous call to DateWith::era_year:

use jiff::civil::{Era, date};

let d1 = date(2024, 7, 2);
let d2 = d1.with().era_year(1900, Era::CE).year(2000).build()?;
assert_eq!(d2, date(2000, 7, 2));

pub fn month(self, month: i8) -> DateWith

Set the month field on a Date.

One can access this value via Date::month.

This overrides any previous month settings.

§Errors

This returns an error when DateWith::build is called if the given month is outside the range 1..=12. This can also return an error if the resulting date is otherwise invalid.

§Example

This shows how to create a new date with a different month:

use jiff::civil::date;

let d1 = date(2005, 11, 5);
assert_eq!(d1.month(), 11);
let d2 = d1.with().month(6).build()?;
assert_eq!(d2.month(), 6);
§Example: only changing the month can fail

For example, while 2024-10-31 is valid, 2024-11-31 is not:

use jiff::civil::date;

let d = date(2024, 10, 31);
assert!(d.with().month(11).build().is_err());

pub fn day(self, day: i8) -> DateWith

Set the day field on a Date.

One can access this value via Date::day.

This overrides any previous day settings.

§Errors

This returns an error when DateWith::build is called if the given given day is outside of allowable days for the corresponding year and month fields.

§Example

This shows some examples of setting the day, including a leap day:

use jiff::civil::date;

let d1 = date(2024, 2, 5);
assert_eq!(d1.day(), 5);
let d2 = d1.with().day(10).build()?;
assert_eq!(d2.day(), 10);
let d3 = d1.with().day(29).build()?;
assert_eq!(d3.day(), 29);
§Example: changing only the day can fail

This shows some examples that will fail:

use jiff::civil::date;

let d1 = date(2023, 2, 5);
// 2023 is not a leap year
assert!(d1.with().day(29).build().is_err());

// September has 30 days, not 31.
let d1 = date(2023, 9, 5);
assert!(d1.with().day(31).build().is_err());

pub fn day_of_year(self, day: i16) -> DateWith

Set the day field on a Date via the ordinal number of a day within a year.

When used, any settings for month are ignored since the month is determined by the day of the year.

The valid values for day are 1..=366. Note though that 366 is only valid for leap years.

This overrides any previous day settings.

§Errors

This returns an error when DateWith::build is called if the given day is outside the allowed range of 1..=366, or when a value of 366 is given for a non-leap year.

§Example

This demonstrates that if a year is a leap year, then 60 corresponds to February 29:

use jiff::civil::date;

let d = date(2024, 1, 1);
assert_eq!(d.with().day_of_year(60).build()?, date(2024, 2, 29));

But for non-leap years, day 60 is March 1:

use jiff::civil::date;

let d = date(2023, 1, 1);
assert_eq!(d.with().day_of_year(60).build()?, date(2023, 3, 1));

And using 366 for a non-leap year will result in an error, since non-leap years only have 365 days:

use jiff::civil::date;

let d = date(2023, 1, 1);
assert!(d.with().day_of_year(366).build().is_err());
// The maximal year is not a leap year, so it returns an error too.
let d = date(9999, 1, 1);
assert!(d.with().day_of_year(366).build().is_err());

pub fn day_of_year_no_leap(self, day: i16) -> DateWith

Set the day field on a Date via the ordinal number of a day within a year, but ignoring leap years.

When used, any settings for month are ignored since the month is determined by the day of the year.

The valid values for day are 1..=365. The value 365 always corresponds to the last day of the year, even for leap years. It is impossible for this routine to return a date corresponding to February 29.

This overrides any previous day settings.

§Errors

This returns an error when DateWith::build is called if the given day is outside the allowed range of 1..=365.

§Example

This demonstrates that 60 corresponds to March 1, regardless of whether the year is a leap year or not:

use jiff::civil::date;

assert_eq!(
    date(2023, 1, 1).with().day_of_year_no_leap(60).build()?,
    date(2023, 3, 1),
);

assert_eq!(
    date(2024, 1, 1).with().day_of_year_no_leap(60).build()?,
    date(2024, 3, 1),
);

And using 365 for any year will always yield the last day of the year:

use jiff::civil::date;

let d = date(2023, 1, 1);
assert_eq!(
    d.with().day_of_year_no_leap(365).build()?,
    d.last_of_year(),
);

let d = date(2024, 1, 1);
assert_eq!(
    d.with().day_of_year_no_leap(365).build()?,
    d.last_of_year(),
);

let d = date(9999, 1, 1);
assert_eq!(
    d.with().day_of_year_no_leap(365).build()?,
    d.last_of_year(),
);

A value of 366 is out of bounds, even for leap years:

use jiff::civil::date;

let d = date(2024, 1, 1);
assert!(d.with().day_of_year_no_leap(366).build().is_err());

Trait Implementations§

§

impl Clone for DateWith

§

fn clone(&self) -> DateWith

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for DateWith

§

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

Formats the value using the given formatter. Read more
§

impl Copy for DateWith

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.

§

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

§

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 primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
§

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>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
§

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 bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
§

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 mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
§

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.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
§

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);
§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new [Painted] with a default [Style]. Read more
§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more