Skip to content

Commit

Permalink
Updates:
Browse files Browse the repository at this point in the history
- Create add/subtract duration public methods which call into contextual_add_or_subtract_duration
  • Loading branch information
jasonwilliams committed Jun 3, 2024
1 parent 3550e9f commit 07d059e
Showing 1 changed file with 24 additions and 7 deletions.
31 changes: 24 additions & 7 deletions src/components/year_month.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,27 +111,44 @@ impl<C: CalendarProtocol> YearMonth<C> {
.months_in_year(&CalendarDateLike::YearMonth(this.clone()), context)
}

pub fn contextual_add_or_subtract_duration(
operation: DurationOperation,
pub fn add_duration(
this: &C::YearMonth,
duration: Duration,
overflow: ArithmeticOverflow,
context: &mut C::Context,
) -> TemporalResult<YearMonth<C>> {
Self::contextual_add_or_subtract_duration(true, this, duration, context, overflow)
}

pub fn subtract_duration(
this: &C::YearMonth,
duration: Duration,
overflow: ArithmeticOverflow,
context: &mut C::Context,
) -> TemporalResult<YearMonth<C>> {
Self::contextual_add_or_subtract_duration(false, this, duration, context, overflow)
}

pub(crate) fn contextual_add_or_subtract_duration(
addition: bool,
this: &C::YearMonth,
mut duration: Duration,
context: &mut C::Context,
overflow: ArithmeticOverflow,
) -> TemporalResult<YearMonth<C>> {
match operation {
DurationOperation::Subtract => duration = duration.negated(),
DurationOperation::Add => {}
if !addition {
duration = duration.negated()
}

let mut fields = TemporalFields::default();
fields.set_field_value("year", &FieldValue::Integer(this.iso_date().year))?;
fields.set_field_value("month", &FieldValue::Integer(this.iso_date().month as i32))?;

let intermediate_date =
let mut intermediate_date =
this.get_calendar()
.date_from_fields(&mut fields, overflow, context)?;

intermediate_date.add_date(&duration, Some(overflow), context)?;
intermediate_date = intermediate_date.add_date(&duration, Some(overflow), context)?;
let mut result_fields = TemporalFields::default();
result_fields
.set_field_value("year", &FieldValue::Integer(intermediate_date.iso_year()))?;
Expand Down

0 comments on commit 07d059e

Please sign in to comment.