diff --git a/temporal_capi/bindings/c/I128Nanoseconds.h b/temporal_capi/bindings/c/I128Nanoseconds.h index 4ac54898f..b026864d6 100644 --- a/temporal_capi/bindings/c/I128Nanoseconds.h +++ b/temporal_capi/bindings/c/I128Nanoseconds.h @@ -15,6 +15,8 @@ +bool temporal_rs_I128Nanoseconds_is_valid(I128Nanoseconds self); + diff --git a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp index 68d117aa8..ec1bac566 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp @@ -36,6 +36,8 @@ struct I128Nanoseconds { int64_t high; uint64_t low; + inline bool is_valid() const; + inline temporal_rs::capi::I128Nanoseconds AsFFI() const; inline static temporal_rs::I128Nanoseconds FromFFI(temporal_rs::capi::I128Nanoseconds c_struct); }; diff --git a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp b/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp index 37115c2bb..1e736be51 100644 --- a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp +++ b/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp @@ -18,10 +18,17 @@ namespace temporal_rs { namespace capi { extern "C" { + bool temporal_rs_I128Nanoseconds_is_valid(temporal_rs::capi::I128Nanoseconds self); + } // extern "C" } // namespace capi } // namespace +inline bool temporal_rs::I128Nanoseconds::is_valid() const { + auto result = temporal_rs::capi::temporal_rs_I128Nanoseconds_is_valid(this->AsFFI()); + return result; +} + inline temporal_rs::capi::I128Nanoseconds temporal_rs::I128Nanoseconds::AsFFI() const { return temporal_rs::capi::I128Nanoseconds { diff --git a/temporal_capi/src/instant.rs b/temporal_capi/src/instant.rs index 01fbfe6cf..8acf2c6c6 100644 --- a/temporal_capi/src/instant.rs +++ b/temporal_capi/src/instant.rs @@ -30,6 +30,13 @@ pub mod ffi { pub low: u64, } + impl I128Nanoseconds { + pub fn is_valid(self) -> bool { + let ns = i128::from(self); + temporal_rs::unix_time::EpochNanoseconds::try_from(ns).is_ok() + } + } + impl Instant { pub fn try_new(ns: I128Nanoseconds) -> Result, TemporalError> { temporal_rs::Instant::try_new(ns.into())