use super::*;
pub struct DateLikeNameSpace(pub(crate) Expr);
impl DateLikeNameSpace {
#[cfg(feature = "business")]
pub fn add_business_days(
self,
n: Expr,
week_mask: [bool; 7],
holidays: Vec<i32>,
roll: Roll,
) -> Expr {
self.0.map_binary(
FunctionExpr::Business(BusinessFunction::AddBusinessDay {
week_mask,
holidays,
roll,
}),
n,
)
}
pub fn to_string(self, format: &str) -> Expr {
let format = format.to_string();
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::ToString(
format,
)))
}
pub fn strftime(self, format: &str) -> Expr {
self.to_string(format)
}
pub fn cast_time_unit(self, tu: TimeUnit) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::CastTimeUnit(
tu,
)))
}
pub fn with_time_unit(self, tu: TimeUnit) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::WithTimeUnit(
tu,
)))
}
#[cfg(feature = "timezones")]
pub fn convert_time_zone(self, time_zone: TimeZone) -> Expr {
self.0.map_unary(FunctionExpr::TemporalExpr(
TemporalFunction::ConvertTimeZone(time_zone),
))
}
pub fn millennium(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Millennium))
}
pub fn century(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Century))
}
pub fn year(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Year))
}
#[cfg(feature = "business")]
pub fn is_business_day(self, week_mask: [bool; 7], holidays: Vec<i32>) -> Expr {
self.0
.map_unary(FunctionExpr::Business(BusinessFunction::IsBusinessDay {
week_mask,
holidays,
}))
}
pub fn is_leap_year(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::IsLeapYear))
}
pub fn iso_year(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::IsoYear))
}
pub fn month(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Month))
}
pub fn days_in_month(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::DaysInMonth))
}
pub fn quarter(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Quarter))
}
pub fn week(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Week))
}
pub fn weekday(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::WeekDay))
}
pub fn day(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Day))
}
pub fn ordinal_day(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::OrdinalDay))
}
pub fn time(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Time))
}
pub fn date(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Date))
}
pub fn datetime(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Datetime))
}
pub fn hour(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Hour))
}
pub fn minute(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Minute))
}
pub fn second(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Second))
}
pub fn millisecond(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Millisecond))
}
pub fn microsecond(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Microsecond))
}
pub fn nanosecond(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::Nanosecond))
}
pub fn timestamp(self, tu: TimeUnit) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::TimeStamp(tu)))
}
pub fn truncate(self, every: Expr) -> Expr {
self.0.map_binary(
FunctionExpr::TemporalExpr(TemporalFunction::Truncate),
every,
)
}
#[cfg(feature = "month_start")]
pub fn month_start(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::MonthStart))
}
#[cfg(feature = "month_end")]
pub fn month_end(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::MonthEnd))
}
#[cfg(feature = "timezones")]
pub fn base_utc_offset(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::BaseUtcOffset))
}
#[cfg(feature = "timezones")]
pub fn dst_offset(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::DSTOffset))
}
pub fn round(self, every: Expr) -> Expr {
self.0
.map_binary(FunctionExpr::TemporalExpr(TemporalFunction::Round), every)
}
#[cfg(feature = "offset_by")]
pub fn offset_by(self, by: Expr) -> Expr {
self.0
.map_binary(FunctionExpr::TemporalExpr(TemporalFunction::OffsetBy), by)
}
#[cfg(feature = "timezones")]
pub fn replace_time_zone(
self,
time_zone: Option<TimeZone>,
ambiguous: Expr,
non_existent: NonExistent,
) -> Expr {
self.0.map_binary(
FunctionExpr::TemporalExpr(TemporalFunction::ReplaceTimeZone(time_zone, non_existent)),
ambiguous,
)
}
pub fn combine(self, time: Expr, tu: TimeUnit) -> Expr {
self.0.map_binary(
FunctionExpr::TemporalExpr(TemporalFunction::Combine(tu)),
time,
)
}
#[cfg(feature = "dtype-duration")]
pub fn total_days(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::TotalDays))
}
#[cfg(feature = "dtype-duration")]
pub fn total_hours(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::TotalHours))
}
#[cfg(feature = "dtype-duration")]
pub fn total_minutes(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::TotalMinutes))
}
#[cfg(feature = "dtype-duration")]
pub fn total_seconds(self) -> Expr {
self.0
.map_unary(FunctionExpr::TemporalExpr(TemporalFunction::TotalSeconds))
}
#[cfg(feature = "dtype-duration")]
pub fn total_milliseconds(self) -> Expr {
self.0.map_unary(FunctionExpr::TemporalExpr(
TemporalFunction::TotalMilliseconds,
))
}
#[cfg(feature = "dtype-duration")]
pub fn total_microseconds(self) -> Expr {
self.0.map_unary(FunctionExpr::TemporalExpr(
TemporalFunction::TotalMicroseconds,
))
}
#[cfg(feature = "dtype-duration")]
pub fn total_nanoseconds(self) -> Expr {
self.0.map_unary(FunctionExpr::TemporalExpr(
TemporalFunction::TotalNanoseconds,
))
}
#[allow(clippy::too_many_arguments)]
pub fn replace(
self,
year: Expr,
month: Expr,
day: Expr,
hour: Expr,
minute: Expr,
second: Expr,
microsecond: Expr,
ambiguous: Expr,
) -> Expr {
self.0.map_n_ary(
FunctionExpr::TemporalExpr(TemporalFunction::Replace),
[
year,
month,
day,
hour,
minute,
second,
microsecond,
ambiguous,
],
)
}
}