Struct DataCalendar
pub struct DataCalendar {
name: Cow<'static, str>,
weekmask: [bool; 7],
grid: BusinessDayGrid,
}Expand description
A Calendar backed by a precomputed business-day grid and a weekend mask.
Fields§
§name: Cow<'static, str>§weekmask: [bool; 7]Indexed by Weekday::num_days_from_monday() (Mon=0 .. Sun=6).
grid: BusinessDayGridImplementations§
§impl DataCalendar
impl DataCalendar
pub fn new(
name: impl Into<Cow<'static, str>>,
holidays: HashSet<NaiveDate>,
weekmask: [bool; 7],
) -> Self
pub fn new( name: impl Into<Cow<'static, str>>, holidays: HashSet<NaiveDate>, weekmask: [bool; 7], ) -> Self
Builds a calendar from an explicit holiday set and weekend mask. The name accepts both static strs (generated tables) and owned strings (calendars built from caller-supplied holiday lists).
pub(crate) fn from_table(
name: &'static str,
dates: &[&str],
weekmask: [bool; 7],
) -> Self
pub(crate) fn from_table( name: &'static str, dates: &[&str], weekmask: [bool; 7], ) -> Self
Builds a calendar from a generated table: ISO-8601 date strings plus a weekend mask. Panics only if the generated data is malformed, which is a build-time invariant, not a runtime input.
fn count_half_open(&self, from: NaiveDate, to: NaiveDate) -> i64
fn count_half_open(&self, from: NaiveDate, to: NaiveDate) -> i64
Business days in the half-open range [from, to) (from <= to), O(1):
the in-horizon part is a prefix-sum subtraction and any out-of-horizon
spill uses the weekend-only closed form (the documented degradation).
Trait Implementations§
§impl Calendar for DataCalendar
impl Calendar for DataCalendar
§fn is_weekend(&self, date: NaiveDate) -> bool
fn is_weekend(&self, date: NaiveDate) -> bool
Whether
date is a weekend (Saturday or Sunday by default).§fn is_holiday(&self, date: NaiveDate) -> bool
fn is_holiday(&self, date: NaiveDate) -> bool
Whether
date is closed for a reason beyond the weekend: a listed
closure, not a Saturday. A weekend day carrying no listed closure is not
a holiday, and the default answers false for every date accordingly. Read more§fn is_business_day(&self, date: NaiveDate) -> bool
fn is_business_day(&self, date: NaiveDate) -> bool
Whether
date is a good business day (not a weekend, not a holiday).§fn business_days_between(&self, start: NaiveDate, end: NaiveDate) -> i64
fn business_days_between(&self, start: NaiveDate, end: NaiveDate) -> i64
The number of business days in the half-open interval
[start, end).
Returns 0 when start >= end. This is the count BUS/252 divides by
252. The default iterates day by day; the data-backed calendars
(DataCalendar, JointCalendar) override it with an O(1)
prefix-sum subtraction over their precomputed business-day grid.§fn business_days_between_inc(
&self,
from: NaiveDate,
to: NaiveDate,
include_first: bool,
include_last: bool,
) -> i64
fn business_days_between_inc( &self, from: NaiveDate, to: NaiveDate, include_first: bool, include_last: bool, ) -> i64
The number of business days between
from and to with caller-controlled
inclusion of each endpoint. When
to < from the count is the negation of the forward count with the
inclusion flags swapped; when to == from the result is 1 only if both
endpoints are included and the date is a business day. The two-argument
Calendar::business_days_between is the [start, end) case
(include_first = true, include_last = false).§fn adjust(
&self,
date: NaiveDate,
convention: BusinessDayConvention,
) -> NaiveDate
fn adjust( &self, date: NaiveDate, convention: BusinessDayConvention, ) -> NaiveDate
Rolls
date to a business day per convention.§fn advance(
&self,
date: NaiveDate,
period: Period,
convention: BusinessDayConvention,
end_of_month: bool,
) -> NaiveDate
fn advance( &self, date: NaiveDate, period: Period, convention: BusinessDayConvention, end_of_month: bool, ) -> NaiveDate
§fn advance_with_roll(
&self,
date: NaiveDate,
period: Period,
roll: RollConvention,
convention: BusinessDayConvention,
end_of_month: bool,
) -> NaiveDate
fn advance_with_roll( &self, date: NaiveDate, period: Period, roll: RollConvention, convention: BusinessDayConvention, end_of_month: bool, ) -> NaiveDate
Advances
date by period, snaps the result by roll, then adjusts it
per convention — the roll-aware form of Calendar::advance, which is
this method under RollConvention::None. Read more§fn end_of_month(&self, date: NaiveDate) -> NaiveDate
fn end_of_month(&self, date: NaiveDate) -> NaiveDate
The last business day of
date’s month — the latest good business
day in the month (weekends and holidays rolled back). Read more§fn is_end_of_month(&self, date: NaiveDate) -> bool
fn is_end_of_month(&self, date: NaiveDate) -> bool
Whether
date is the last business day of its month (its business
end-of-month). Strict: a trailing
weekend day after the last business day is not end-of-month (use
Calendar::is_month_end_anchor for the end-of-month roll gate, which
also fires on those trailing days).§fn is_month_end_anchor(&self, date: NaiveDate) -> bool
fn is_month_end_anchor(&self, date: NaiveDate) -> bool
Whether
date anchors the end-of-month roll: it is on or after its
month’s last business day. This fires for the last business day and any
trailing weekend/holiday days (so a month-end falling on a weekend, e.g.
Sat 28-Feb, still anchors the rule), matching the end-of-month advance
behaviour in Calendar::advance.§fn next_business_day(&self, date: NaiveDate) -> NaiveDate
fn next_business_day(&self, date: NaiveDate) -> NaiveDate
The first business day on or after
date.§fn previous_business_day(&self, date: NaiveDate) -> NaiveDate
fn previous_business_day(&self, date: NaiveDate) -> NaiveDate
The first business day on or before
date.§fn add_business_days(&self, date: NaiveDate, n: i64) -> NaiveDate
fn add_business_days(&self, date: NaiveDate, n: i64) -> NaiveDate
Shifts
date by n good business days, skipping weekends and holidays.
Negative n looks backward; n == 0 returns date unchanged (even if it
is itself a holiday). Each counted step lands on a business day — this is
the primitive a fixing lag (e.g. -2 business days off the reset anchor)
is built on.§impl Clone for DataCalendar
impl Clone for DataCalendar
§fn clone(&self) -> DataCalendar
fn clone(&self) -> DataCalendar
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for DataCalendar
impl RefUnwindSafe for DataCalendar
impl Send for DataCalendar
impl Sync for DataCalendar
impl Unpin for DataCalendar
impl UnsafeUnpin for DataCalendar
impl UnwindSafe for DataCalendar
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
Mutably borrows from an owned value. Read more