From 07d059e665c99591a8c94c573fcea0a96cc8ac29 Mon Sep 17 00:00:00 2001 From: jasonwilliams Date: Mon, 3 Jun 2024 23:06:27 +0100 Subject: [PATCH] Updates: - Create add/subtract duration public methods which call into contextual_add_or_subtract_duration --- src/components/year_month.rs | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/components/year_month.rs b/src/components/year_month.rs index 3a8e3032..939bf6de 100644 --- a/src/components/year_month.rs +++ b/src/components/year_month.rs @@ -111,27 +111,44 @@ impl YearMonth { .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> { + 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> { + 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> { - 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()))?;