From bba70343896557648d793ae805bec05132f6023f Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Wed, 25 Feb 2026 22:34:22 +0100 Subject: [PATCH 1/2] Expose fields needed for structured clone --- temporal_capi/bindings/c/PlainMonthDay.h | 4 ++++ temporal_capi/bindings/c/PlainYearMonth.h | 2 ++ .../bindings/cpp/temporal_rs/PlainMonthDay.d.hpp | 4 ++++ .../bindings/cpp/temporal_rs/PlainMonthDay.hpp | 14 ++++++++++++++ .../bindings/cpp/temporal_rs/PlainYearMonth.d.hpp | 2 ++ .../bindings/cpp/temporal_rs/PlainYearMonth.hpp | 7 +++++++ temporal_capi/src/plain_month_day.rs | 9 +++++++++ temporal_capi/src/plain_year_month.rs | 4 ++++ 8 files changed, 46 insertions(+) diff --git a/temporal_capi/bindings/c/PlainMonthDay.h b/temporal_capi/bindings/c/PlainMonthDay.h index 64c5dfd73..fbd5c74b5 100644 --- a/temporal_capi/bindings/c/PlainMonthDay.h +++ b/temporal_capi/bindings/c/PlainMonthDay.h @@ -47,6 +47,10 @@ temporal_rs_PlainMonthDay_from_utf16_result temporal_rs_PlainMonthDay_from_utf16 uint8_t temporal_rs_PlainMonthDay_day(const PlainMonthDay* self); +uint8_t temporal_rs_PlainMonthDay_month(const PlainMonthDay* self); + +int32_t temporal_rs_PlainMonthDay_reference_year(const PlainMonthDay* self); + const Calendar* temporal_rs_PlainMonthDay_calendar(const PlainMonthDay* self); void temporal_rs_PlainMonthDay_month_code(const PlainMonthDay* self, DiplomatWrite* write); diff --git a/temporal_capi/bindings/c/PlainYearMonth.h b/temporal_capi/bindings/c/PlainYearMonth.h index 2283264e3..2f633b803 100644 --- a/temporal_capi/bindings/c/PlainYearMonth.h +++ b/temporal_capi/bindings/c/PlainYearMonth.h @@ -64,6 +64,8 @@ void temporal_rs_PlainYearMonth_era(const PlainYearMonth* self, DiplomatWrite* w typedef struct temporal_rs_PlainYearMonth_era_year_result {union {int32_t ok; }; bool is_ok;} temporal_rs_PlainYearMonth_era_year_result; temporal_rs_PlainYearMonth_era_year_result temporal_rs_PlainYearMonth_era_year(const PlainYearMonth* self); +uint8_t temporal_rs_PlainYearMonth_reference_day(const PlainYearMonth* self); + const Calendar* temporal_rs_PlainYearMonth_calendar(const PlainYearMonth* self); typedef struct temporal_rs_PlainYearMonth_add_result {union {PlainYearMonth* ok; TemporalError err;}; bool is_ok;} temporal_rs_PlainYearMonth_add_result; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp index 5638252ac..acf915256 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp @@ -57,6 +57,10 @@ class PlainMonthDay { inline uint8_t day() const; + inline uint8_t month() const; + + inline int32_t reference_year() const; + inline const temporal_rs::Calendar& calendar() const; inline std::string month_code() const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp index 01e409f4c..9a63f8c71 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp @@ -50,6 +50,10 @@ namespace capi { uint8_t temporal_rs_PlainMonthDay_day(const temporal_rs::capi::PlainMonthDay* self); + uint8_t temporal_rs_PlainMonthDay_month(const temporal_rs::capi::PlainMonthDay* self); + + int32_t temporal_rs_PlainMonthDay_reference_year(const temporal_rs::capi::PlainMonthDay* self); + const temporal_rs::capi::Calendar* temporal_rs_PlainMonthDay_calendar(const temporal_rs::capi::PlainMonthDay* self); void temporal_rs_PlainMonthDay_month_code(const temporal_rs::capi::PlainMonthDay* self, temporal_rs::diplomat::capi::DiplomatWrite* write); @@ -121,6 +125,16 @@ inline uint8_t temporal_rs::PlainMonthDay::day() const { return result; } +inline uint8_t temporal_rs::PlainMonthDay::month() const { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_month(this->AsFFI()); + return result; +} + +inline int32_t temporal_rs::PlainMonthDay::reference_year() const { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_reference_year(this->AsFFI()); + return result; +} + inline const temporal_rs::Calendar& temporal_rs::PlainMonthDay::calendar() const { auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_calendar(this->AsFFI()); return *temporal_rs::Calendar::FromFFI(result); diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp index b6ea92483..585dea504 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp @@ -78,6 +78,8 @@ class PlainYearMonth { inline std::optional era_year() const; + inline uint8_t reference_day() const; + inline const temporal_rs::Calendar& calendar() const; inline temporal_rs::diplomat::result, temporal_rs::TemporalError> add(const temporal_rs::Duration& duration, temporal_rs::ArithmeticOverflow overflow) const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp index 5f66d553e..2d499756b 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp @@ -67,6 +67,8 @@ namespace capi { typedef struct temporal_rs_PlainYearMonth_era_year_result {union {int32_t ok; }; bool is_ok;} temporal_rs_PlainYearMonth_era_year_result; temporal_rs_PlainYearMonth_era_year_result temporal_rs_PlainYearMonth_era_year(const temporal_rs::capi::PlainYearMonth* self); + uint8_t temporal_rs_PlainYearMonth_reference_day(const temporal_rs::capi::PlainYearMonth* self); + const temporal_rs::capi::Calendar* temporal_rs_PlainYearMonth_calendar(const temporal_rs::capi::PlainYearMonth* self); typedef struct temporal_rs_PlainYearMonth_add_result {union {temporal_rs::capi::PlainYearMonth* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainYearMonth_add_result; @@ -204,6 +206,11 @@ inline std::optional temporal_rs::PlainYearMonth::era_year() const { return result.is_ok ? std::optional(result.ok) : std::nullopt; } +inline uint8_t temporal_rs::PlainYearMonth::reference_day() const { + auto result = temporal_rs::capi::temporal_rs_PlainYearMonth_reference_day(this->AsFFI()); + return result; +} + inline const temporal_rs::Calendar& temporal_rs::PlainYearMonth::calendar() const { auto result = temporal_rs::capi::temporal_rs_PlainYearMonth_calendar(this->AsFFI()); return *temporal_rs::Calendar::FromFFI(result); diff --git a/temporal_capi/src/plain_month_day.rs b/temporal_capi/src/plain_month_day.rs index fe3878ab1..6e54d0253 100644 --- a/temporal_capi/src/plain_month_day.rs +++ b/temporal_capi/src/plain_month_day.rs @@ -87,16 +87,25 @@ pub mod ffi { pub fn day(&self) -> u8 { self.0.day() } + pub fn calendar<'a>(&'a self) -> &'a Calendar { Calendar::transparent_convert(self.0.calendar()) } + pub fn month(&self) -> u8 { + self.0.month_code().to_month_integer() + } + pub fn month_code(&self, write: &mut DiplomatWrite) { let code = self.0.month_code(); // throw away the error, this should always succeed let _ = write.write_str(code.as_str()); } + pub fn reference_year(&self) -> i32 { + self.0.reference_year() + } + pub fn to_plain_date( &self, year: Option, diff --git a/temporal_capi/src/plain_year_month.rs b/temporal_capi/src/plain_year_month.rs index 066bbd775..2507bf3ab 100644 --- a/temporal_capi/src/plain_year_month.rs +++ b/temporal_capi/src/plain_year_month.rs @@ -120,6 +120,10 @@ pub mod ffi { self.0.era_year() } + pub fn reference_day(&self) -> u8 { + self.0.reference_day() + } + pub fn calendar<'a>(&'a self) -> &'a Calendar { Calendar::transparent_convert(self.0.calendar()) } From 3f79816d15a643ce1f05d79baf72f5baf82dce5d Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Fri, 27 Feb 2026 14:46:32 +0100 Subject: [PATCH 2/2] fix --- temporal_capi/bindings/c/PlainMonthDay.h | 8 +++--- .../cpp/temporal_rs/PlainMonthDay.d.hpp | 8 +++--- .../cpp/temporal_rs/PlainMonthDay.hpp | 28 +++++++++---------- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/temporal_capi/bindings/c/PlainMonthDay.h b/temporal_capi/bindings/c/PlainMonthDay.h index fbd5c74b5..96f001b14 100644 --- a/temporal_capi/bindings/c/PlainMonthDay.h +++ b/temporal_capi/bindings/c/PlainMonthDay.h @@ -47,14 +47,14 @@ temporal_rs_PlainMonthDay_from_utf16_result temporal_rs_PlainMonthDay_from_utf16 uint8_t temporal_rs_PlainMonthDay_day(const PlainMonthDay* self); -uint8_t temporal_rs_PlainMonthDay_month(const PlainMonthDay* self); - -int32_t temporal_rs_PlainMonthDay_reference_year(const PlainMonthDay* self); - const Calendar* temporal_rs_PlainMonthDay_calendar(const PlainMonthDay* self); +uint8_t temporal_rs_PlainMonthDay_month(const PlainMonthDay* self); + void temporal_rs_PlainMonthDay_month_code(const PlainMonthDay* self, DiplomatWrite* write); +int32_t temporal_rs_PlainMonthDay_reference_year(const PlainMonthDay* self); + typedef struct temporal_rs_PlainMonthDay_to_plain_date_result {union {PlainDate* ok; TemporalError err;}; bool is_ok;} temporal_rs_PlainMonthDay_to_plain_date_result; temporal_rs_PlainMonthDay_to_plain_date_result temporal_rs_PlainMonthDay_to_plain_date(const PlainMonthDay* self, PartialDate_option year); diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp index acf915256..fd505d5a6 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp @@ -57,16 +57,16 @@ class PlainMonthDay { inline uint8_t day() const; - inline uint8_t month() const; - - inline int32_t reference_year() const; - inline const temporal_rs::Calendar& calendar() const; + inline uint8_t month() const; + inline std::string month_code() const; template inline void month_code_write(W& writeable_output) const; + inline int32_t reference_year() const; + inline temporal_rs::diplomat::result, temporal_rs::TemporalError> to_plain_date(std::optional year) const; inline temporal_rs::diplomat::result epoch_ms_for(temporal_rs::TimeZone time_zone) const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp index 9a63f8c71..3628a8f49 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp @@ -50,14 +50,14 @@ namespace capi { uint8_t temporal_rs_PlainMonthDay_day(const temporal_rs::capi::PlainMonthDay* self); - uint8_t temporal_rs_PlainMonthDay_month(const temporal_rs::capi::PlainMonthDay* self); - - int32_t temporal_rs_PlainMonthDay_reference_year(const temporal_rs::capi::PlainMonthDay* self); - const temporal_rs::capi::Calendar* temporal_rs_PlainMonthDay_calendar(const temporal_rs::capi::PlainMonthDay* self); + uint8_t temporal_rs_PlainMonthDay_month(const temporal_rs::capi::PlainMonthDay* self); + void temporal_rs_PlainMonthDay_month_code(const temporal_rs::capi::PlainMonthDay* self, temporal_rs::diplomat::capi::DiplomatWrite* write); + int32_t temporal_rs_PlainMonthDay_reference_year(const temporal_rs::capi::PlainMonthDay* self); + typedef struct temporal_rs_PlainMonthDay_to_plain_date_result {union {temporal_rs::capi::PlainDate* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainMonthDay_to_plain_date_result; temporal_rs_PlainMonthDay_to_plain_date_result temporal_rs_PlainMonthDay_to_plain_date(const temporal_rs::capi::PlainMonthDay* self, temporal_rs::capi::PartialDate_option year); @@ -125,21 +125,16 @@ inline uint8_t temporal_rs::PlainMonthDay::day() const { return result; } -inline uint8_t temporal_rs::PlainMonthDay::month() const { - auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_month(this->AsFFI()); - return result; -} - -inline int32_t temporal_rs::PlainMonthDay::reference_year() const { - auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_reference_year(this->AsFFI()); - return result; -} - inline const temporal_rs::Calendar& temporal_rs::PlainMonthDay::calendar() const { auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_calendar(this->AsFFI()); return *temporal_rs::Calendar::FromFFI(result); } +inline uint8_t temporal_rs::PlainMonthDay::month() const { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_month(this->AsFFI()); + return result; +} + inline std::string temporal_rs::PlainMonthDay::month_code() const { std::string output; temporal_rs::diplomat::capi::DiplomatWrite write = temporal_rs::diplomat::WriteFromString(output); @@ -154,6 +149,11 @@ inline void temporal_rs::PlainMonthDay::month_code_write(W& writeable) const { &write); } +inline int32_t temporal_rs::PlainMonthDay::reference_year() const { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_reference_year(this->AsFFI()); + return result; +} + inline temporal_rs::diplomat::result, temporal_rs::TemporalError> temporal_rs::PlainMonthDay::to_plain_date(std::optional year) const { auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_to_plain_date(this->AsFFI(), year.has_value() ? (temporal_rs::capi::PartialDate_option{ { year.value().AsFFI() }, true }) : (temporal_rs::capi::PartialDate_option{ {}, false }));