diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp index 58c66d3f3..6d01bd933 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp @@ -77,6 +77,10 @@ class PlainDate { inline diplomat::result, temporal_rs::TemporalError> since(const temporal_rs::PlainDate& other, temporal_rs::DifferenceSettings settings) const; + inline bool equals(const temporal_rs::PlainDate& other) const; + + inline static int8_t compare(const temporal_rs::PlainDate& one, const temporal_rs::PlainDate& two); + inline int32_t year() const; inline uint8_t month() const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp index b913fc06a..15ed83b77 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp @@ -74,6 +74,10 @@ namespace capi { typedef struct temporal_rs_PlainDate_since_result {union {temporal_rs::capi::Duration* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainDate_since_result; temporal_rs_PlainDate_since_result temporal_rs_PlainDate_since(const temporal_rs::capi::PlainDate* self, const temporal_rs::capi::PlainDate* other, temporal_rs::capi::DifferenceSettings settings); + bool temporal_rs_PlainDate_equals(const temporal_rs::capi::PlainDate* self, const temporal_rs::capi::PlainDate* other); + + int8_t temporal_rs_PlainDate_compare(const temporal_rs::capi::PlainDate* one, const temporal_rs::capi::PlainDate* two); + int32_t temporal_rs_PlainDate_year(const temporal_rs::capi::PlainDate* self); uint8_t temporal_rs_PlainDate_month(const temporal_rs::capi::PlainDate* self); @@ -233,6 +237,18 @@ inline diplomat::result, temporal_rs::Tem return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::Duration::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); } +inline bool temporal_rs::PlainDate::equals(const temporal_rs::PlainDate& other) const { + auto result = temporal_rs::capi::temporal_rs_PlainDate_equals(this->AsFFI(), + other.AsFFI()); + return result; +} + +inline int8_t temporal_rs::PlainDate::compare(const temporal_rs::PlainDate& one, const temporal_rs::PlainDate& two) { + auto result = temporal_rs::capi::temporal_rs_PlainDate_compare(one.AsFFI(), + two.AsFFI()); + return result; +} + inline int32_t temporal_rs::PlainDate::year() const { auto result = temporal_rs::capi::temporal_rs_PlainDate_year(this->AsFFI()); return result; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp index 0a393a7c4..4f3d2ffd9 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp @@ -115,6 +115,10 @@ class PlainDateTime { inline diplomat::result, temporal_rs::TemporalError> since(const temporal_rs::PlainDateTime& other, temporal_rs::DifferenceSettings settings) const; + inline bool equals(const temporal_rs::PlainDateTime& other) const; + + inline static int8_t compare(const temporal_rs::PlainDateTime& one, const temporal_rs::PlainDateTime& two); + inline diplomat::result, temporal_rs::TemporalError> round(temporal_rs::RoundingOptions options) const; inline diplomat::result, temporal_rs::TemporalError> to_plain_date() const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp index ca01fea63..370bdbca2 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp @@ -118,6 +118,10 @@ namespace capi { typedef struct temporal_rs_PlainDateTime_since_result {union {temporal_rs::capi::Duration* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainDateTime_since_result; temporal_rs_PlainDateTime_since_result temporal_rs_PlainDateTime_since(const temporal_rs::capi::PlainDateTime* self, const temporal_rs::capi::PlainDateTime* other, temporal_rs::capi::DifferenceSettings settings); + bool temporal_rs_PlainDateTime_equals(const temporal_rs::capi::PlainDateTime* self, const temporal_rs::capi::PlainDateTime* other); + + int8_t temporal_rs_PlainDateTime_compare(const temporal_rs::capi::PlainDateTime* one, const temporal_rs::capi::PlainDateTime* two); + typedef struct temporal_rs_PlainDateTime_round_result {union {temporal_rs::capi::PlainDateTime* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainDateTime_round_result; temporal_rs_PlainDateTime_round_result temporal_rs_PlainDateTime_round(const temporal_rs::capi::PlainDateTime* self, temporal_rs::capi::RoundingOptions options); @@ -359,6 +363,18 @@ inline diplomat::result, temporal_rs::Tem return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::Duration::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); } +inline bool temporal_rs::PlainDateTime::equals(const temporal_rs::PlainDateTime& other) const { + auto result = temporal_rs::capi::temporal_rs_PlainDateTime_equals(this->AsFFI(), + other.AsFFI()); + return result; +} + +inline int8_t temporal_rs::PlainDateTime::compare(const temporal_rs::PlainDateTime& one, const temporal_rs::PlainDateTime& two) { + auto result = temporal_rs::capi::temporal_rs_PlainDateTime_compare(one.AsFFI(), + two.AsFFI()); + return result; +} + inline diplomat::result, temporal_rs::TemporalError> temporal_rs::PlainDateTime::round(temporal_rs::RoundingOptions options) const { auto result = temporal_rs::capi::temporal_rs_PlainDateTime_round(this->AsFFI(), options.AsFFI()); diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp index 0d42fcebc..ef098ac65 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp @@ -37,6 +37,10 @@ class PlainMonthDay { inline diplomat::result, temporal_rs::TemporalError> with(temporal_rs::PartialDate partial, temporal_rs::ArithmeticOverflow overflow) const; + inline bool equals(const temporal_rs::PlainMonthDay& other) const; + + inline static int8_t compare(const temporal_rs::PlainMonthDay& one, const temporal_rs::PlainMonthDay& two); + inline static diplomat::result, temporal_rs::TemporalError> from_utf8(std::string_view s); inline static diplomat::result, temporal_rs::TemporalError> from_utf16(std::u16string_view s); diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp index dae29131e..d5ab3272a 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp @@ -28,6 +28,10 @@ namespace capi { typedef struct temporal_rs_PlainMonthDay_with_result {union {temporal_rs::capi::PlainMonthDay* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainMonthDay_with_result; temporal_rs_PlainMonthDay_with_result temporal_rs_PlainMonthDay_with(const temporal_rs::capi::PlainMonthDay* self, temporal_rs::capi::PartialDate partial, temporal_rs::capi::ArithmeticOverflow overflow); + bool temporal_rs_PlainMonthDay_equals(const temporal_rs::capi::PlainMonthDay* self, const temporal_rs::capi::PlainMonthDay* other); + + int8_t temporal_rs_PlainMonthDay_compare(const temporal_rs::capi::PlainMonthDay* one, const temporal_rs::capi::PlainMonthDay* two); + typedef struct temporal_rs_PlainMonthDay_from_utf8_result {union {temporal_rs::capi::PlainMonthDay* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainMonthDay_from_utf8_result; temporal_rs_PlainMonthDay_from_utf8_result temporal_rs_PlainMonthDay_from_utf8(diplomat::capi::DiplomatStringView s); @@ -70,6 +74,18 @@ inline diplomat::result, temporal_rs return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::PlainMonthDay::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); } +inline bool temporal_rs::PlainMonthDay::equals(const temporal_rs::PlainMonthDay& other) const { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_equals(this->AsFFI(), + other.AsFFI()); + return result; +} + +inline int8_t temporal_rs::PlainMonthDay::compare(const temporal_rs::PlainMonthDay& one, const temporal_rs::PlainMonthDay& two) { + auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_compare(one.AsFFI(), + two.AsFFI()); + return result; +} + inline diplomat::result, temporal_rs::TemporalError> temporal_rs::PlainMonthDay::from_utf8(std::string_view s) { auto result = temporal_rs::capi::temporal_rs_PlainMonthDay_from_utf8({s.data(), s.size()}); return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::PlainMonthDay::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp index f2683e164..4dad11e38 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp @@ -73,6 +73,10 @@ class PlainTime { inline diplomat::result, temporal_rs::TemporalError> since(const temporal_rs::PlainTime& other, temporal_rs::DifferenceSettings settings) const; + inline bool equals(const temporal_rs::PlainTime& other) const; + + inline static int8_t compare(const temporal_rs::PlainTime& one, const temporal_rs::PlainTime& two); + inline diplomat::result, temporal_rs::TemporalError> round(temporal_rs::Unit smallest_unit, std::optional rounding_increment, std::optional rounding_mode) const; inline diplomat::result to_ixdtf_string(temporal_rs::ToStringRoundingOptions options) const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp index 5977c81f4..28b2c1b0d 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp @@ -74,6 +74,10 @@ namespace capi { typedef struct temporal_rs_PlainTime_since_result {union {temporal_rs::capi::Duration* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainTime_since_result; temporal_rs_PlainTime_since_result temporal_rs_PlainTime_since(const temporal_rs::capi::PlainTime* self, const temporal_rs::capi::PlainTime* other, temporal_rs::capi::DifferenceSettings settings); + bool temporal_rs_PlainTime_equals(const temporal_rs::capi::PlainTime* self, const temporal_rs::capi::PlainTime* other); + + int8_t temporal_rs_PlainTime_compare(const temporal_rs::capi::PlainTime* one, const temporal_rs::capi::PlainTime* two); + typedef struct temporal_rs_PlainTime_round_result {union {temporal_rs::capi::PlainTime* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainTime_round_result; temporal_rs_PlainTime_round_result temporal_rs_PlainTime_round(const temporal_rs::capi::PlainTime* self, temporal_rs::capi::Unit smallest_unit, diplomat::capi::OptionF64 rounding_increment, temporal_rs::capi::RoundingMode_option rounding_mode); @@ -198,6 +202,18 @@ inline diplomat::result, temporal_rs::Tem return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::Duration::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); } +inline bool temporal_rs::PlainTime::equals(const temporal_rs::PlainTime& other) const { + auto result = temporal_rs::capi::temporal_rs_PlainTime_equals(this->AsFFI(), + other.AsFFI()); + return result; +} + +inline int8_t temporal_rs::PlainTime::compare(const temporal_rs::PlainTime& one, const temporal_rs::PlainTime& two) { + auto result = temporal_rs::capi::temporal_rs_PlainTime_compare(one.AsFFI(), + two.AsFFI()); + return result; +} + inline diplomat::result, temporal_rs::TemporalError> temporal_rs::PlainTime::round(temporal_rs::Unit smallest_unit, std::optional rounding_increment, std::optional rounding_mode) const { auto result = temporal_rs::capi::temporal_rs_PlainTime_round(this->AsFFI(), smallest_unit.AsFFI(), diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp index 17b905287..5ec3f7578 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp @@ -78,6 +78,10 @@ class PlainYearMonth { inline diplomat::result, temporal_rs::TemporalError> since(const temporal_rs::PlainYearMonth& other, temporal_rs::DifferenceSettings settings) const; + inline bool equals(const temporal_rs::PlainYearMonth& other) const; + + inline static int8_t compare(const temporal_rs::PlainYearMonth& one, const temporal_rs::PlainYearMonth& two); + inline diplomat::result, temporal_rs::TemporalError> to_plain_date() const; inline const temporal_rs::capi::PlainYearMonth* AsFFI() const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp index 72e170c01..badb15342 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp @@ -75,6 +75,10 @@ namespace capi { typedef struct temporal_rs_PlainYearMonth_since_result {union {temporal_rs::capi::Duration* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainYearMonth_since_result; temporal_rs_PlainYearMonth_since_result temporal_rs_PlainYearMonth_since(const temporal_rs::capi::PlainYearMonth* self, const temporal_rs::capi::PlainYearMonth* other, temporal_rs::capi::DifferenceSettings settings); + bool temporal_rs_PlainYearMonth_equals(const temporal_rs::capi::PlainYearMonth* self, const temporal_rs::capi::PlainYearMonth* other); + + int8_t temporal_rs_PlainYearMonth_compare(const temporal_rs::capi::PlainYearMonth* one, const temporal_rs::capi::PlainYearMonth* two); + typedef struct temporal_rs_PlainYearMonth_to_plain_date_result {union {temporal_rs::capi::PlainDate* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_PlainYearMonth_to_plain_date_result; temporal_rs_PlainYearMonth_to_plain_date_result temporal_rs_PlainYearMonth_to_plain_date(const temporal_rs::capi::PlainYearMonth* self); @@ -213,6 +217,18 @@ inline diplomat::result, temporal_rs::Tem return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::Duration::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); } +inline bool temporal_rs::PlainYearMonth::equals(const temporal_rs::PlainYearMonth& other) const { + auto result = temporal_rs::capi::temporal_rs_PlainYearMonth_equals(this->AsFFI(), + other.AsFFI()); + return result; +} + +inline int8_t temporal_rs::PlainYearMonth::compare(const temporal_rs::PlainYearMonth& one, const temporal_rs::PlainYearMonth& two) { + auto result = temporal_rs::capi::temporal_rs_PlainYearMonth_compare(one.AsFFI(), + two.AsFFI()); + return result; +} + inline diplomat::result, temporal_rs::TemporalError> temporal_rs::PlainYearMonth::to_plain_date() const { auto result = temporal_rs::capi::temporal_rs_PlainYearMonth_to_plain_date(this->AsFFI()); return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::PlainDate::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); diff --git a/temporal_capi/src/plain_date.rs b/temporal_capi/src/plain_date.rs index d2e724fb6..946e546ac 100644 --- a/temporal_capi/src/plain_date.rs +++ b/temporal_capi/src/plain_date.rs @@ -177,6 +177,16 @@ pub mod ffi { .map_err(Into::into) } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + let tuple1 = (one.iso_year(), one.iso_month(), one.iso_day()); + let tuple2 = (two.iso_year(), two.iso_month(), two.iso_day()); + + tuple1.cmp(&tuple2) + } pub fn year(&self) -> i32 { self.0.year() } diff --git a/temporal_capi/src/plain_date_time.rs b/temporal_capi/src/plain_date_time.rs index 52b071245..62616799d 100644 --- a/temporal_capi/src/plain_date_time.rs +++ b/temporal_capi/src/plain_date_time.rs @@ -262,6 +262,37 @@ pub mod ffi { .map_err(Into::into) } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + let tuple1 = ( + one.iso_year(), + one.iso_month(), + one.iso_day(), + one.hour(), + one.minute(), + one.second(), + one.millisecond(), + one.microsecond(), + one.nanosecond(), + ); + let tuple2 = ( + two.iso_year(), + two.iso_month(), + two.iso_day(), + two.hour(), + two.minute(), + two.second(), + two.millisecond(), + two.microsecond(), + two.nanosecond(), + ); + + tuple1.cmp(&tuple2) + } + pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { self.0 .round(options.try_into()?) diff --git a/temporal_capi/src/plain_month_day.rs b/temporal_capi/src/plain_month_day.rs index 85d85e642..90de91c70 100644 --- a/temporal_capi/src/plain_month_day.rs +++ b/temporal_capi/src/plain_month_day.rs @@ -48,6 +48,14 @@ pub mod ffi { .map_err(Into::into) } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + (one.iso_year(), one.iso_month()).cmp(&(two.iso_year(), two.iso_month())) + } + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { // TODO(#275) This should not need to validate let s = str::from_utf8(s).map_err(|_| temporal_rs::TemporalError::range())?; diff --git a/temporal_capi/src/plain_time.rs b/temporal_capi/src/plain_time.rs index ed6a8f168..6571c2ac8 100644 --- a/temporal_capi/src/plain_time.rs +++ b/temporal_capi/src/plain_time.rs @@ -164,6 +164,29 @@ pub mod ffi { .map(|x| Box::new(Duration(x))) .map_err(Into::into) } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + let tuple1 = ( + one.hour(), + one.minute(), + one.second(), + one.millisecond(), + one.microsecond(), + one.nanosecond(), + ); + let tuple2 = ( + two.hour(), + two.minute(), + two.second(), + two.millisecond(), + two.microsecond(), + two.nanosecond(), + ); + + tuple1.cmp(&tuple2) + } pub fn round( &self, smallest_unit: Unit, diff --git a/temporal_capi/src/plain_year_month.rs b/temporal_capi/src/plain_year_month.rs index bd325946d..f53049779 100644 --- a/temporal_capi/src/plain_year_month.rs +++ b/temporal_capi/src/plain_year_month.rs @@ -160,6 +160,12 @@ pub mod ffi { .map(|x| Box::new(Duration(x))) .map_err(Into::into) } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + (one.iso_year(), one.iso_month()).cmp(&(two.iso_year(), two.iso_month())) + } pub fn to_plain_date(&self) -> Result, TemporalError> { self.0 .to_plain_date()