diff --git a/temporal_capi/bindings/c/TimeZone.h b/temporal_capi/bindings/c/TimeZone.h index 366acc882..671e43aaf 100644 --- a/temporal_capi/bindings/c/TimeZone.h +++ b/temporal_capi/bindings/c/TimeZone.h @@ -39,6 +39,8 @@ temporal_rs_TimeZone_identifier_with_provider_result temporal_rs_TimeZone_identi TimeZone* temporal_rs_TimeZone_utc(void); +TimeZone* temporal_rs_TimeZone_zero(void); + typedef struct temporal_rs_TimeZone_utc_with_provider_result {union {TimeZone* ok; TemporalError err;}; bool is_ok;} temporal_rs_TimeZone_utc_with_provider_result; temporal_rs_TimeZone_utc_with_provider_result temporal_rs_TimeZone_utc_with_provider(const Provider* p); diff --git a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp index cb848eb55..3e3793d68 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp @@ -50,6 +50,14 @@ class TimeZone { inline static std::unique_ptr utc(); + /** + * Create a TimeZone that represents +00:00 + * + * This is the only way to infallibly make a TimeZone without compiled_data, + * and can be used as a fallback. + */ + inline static std::unique_ptr zero(); + inline static diplomat::result, temporal_rs::TemporalError> utc_with_provider(const temporal_rs::Provider& p); inline std::unique_ptr clone() const; diff --git a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp b/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp index aa8f1f6db..b7af5e61b 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp @@ -42,6 +42,8 @@ namespace capi { temporal_rs::capi::TimeZone* temporal_rs_TimeZone_utc(void); + temporal_rs::capi::TimeZone* temporal_rs_TimeZone_zero(void); + typedef struct temporal_rs_TimeZone_utc_with_provider_result {union {temporal_rs::capi::TimeZone* ok; temporal_rs::capi::TemporalError err;}; bool is_ok;} temporal_rs_TimeZone_utc_with_provider_result; temporal_rs_TimeZone_utc_with_provider_result temporal_rs_TimeZone_utc_with_provider(const temporal_rs::capi::Provider* p); @@ -122,6 +124,11 @@ inline std::unique_ptr temporal_rs::TimeZone::utc() { return std::unique_ptr(temporal_rs::TimeZone::FromFFI(result)); } +inline std::unique_ptr temporal_rs::TimeZone::zero() { + auto result = temporal_rs::capi::temporal_rs_TimeZone_zero(); + return std::unique_ptr(temporal_rs::TimeZone::FromFFI(result)); +} + inline diplomat::result, temporal_rs::TemporalError> temporal_rs::TimeZone::utc_with_provider(const temporal_rs::Provider& p) { auto result = temporal_rs::capi::temporal_rs_TimeZone_utc_with_provider(p.AsFFI()); return result.is_ok ? diplomat::result, temporal_rs::TemporalError>(diplomat::Ok>(std::unique_ptr(temporal_rs::TimeZone::FromFFI(result.ok)))) : diplomat::result, temporal_rs::TemporalError>(diplomat::Err(temporal_rs::TemporalError::FromFFI(result.err))); diff --git a/temporal_capi/src/time_zone.rs b/temporal_capi/src/time_zone.rs index c3a8cd562..3ee04221e 100644 --- a/temporal_capi/src/time_zone.rs +++ b/temporal_capi/src/time_zone.rs @@ -77,6 +77,16 @@ pub mod ffi { // TODO merge signature with below Box::new(Self(temporal_rs::TimeZone::utc())) } + + /// Create a TimeZone that represents +00:00 + /// + /// This is the only way to infallibly make a TimeZone without compiled_data, + /// and can be used as a fallback. + pub fn zero() -> Box { + // TODO merge signature with below + Box::new(Self(temporal_rs::TimeZone::UtcOffset(Default::default()))) + } + pub fn utc_with_provider<'p>(p: &Provider<'p>) -> Result, TemporalError> { Ok(Box::new(Self(with_provider!(p, |p| { temporal_rs::TimeZone::utc_with_provider(p)