diff --git a/temporal_capi/bindings/c/Provider.d.h b/temporal_capi/bindings/c/Provider.d.h new file mode 100644 index 000000000..f55779116 --- /dev/null +++ b/temporal_capi/bindings/c/Provider.d.h @@ -0,0 +1,19 @@ +#ifndef Provider_D_H +#define Provider_D_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + + + + +typedef struct Provider Provider; + + + + +#endif // Provider_D_H diff --git a/temporal_capi/bindings/c/Provider.h b/temporal_capi/bindings/c/Provider.h new file mode 100644 index 000000000..3a60b153e --- /dev/null +++ b/temporal_capi/bindings/c/Provider.h @@ -0,0 +1,31 @@ +#ifndef Provider_H +#define Provider_H + +#include +#include +#include +#include +#include "diplomat_runtime.h" + + +#include "Provider.d.h" + + + + + + +typedef struct temporal_rs_Provider_new_zoneinfo64_result {union {Provider* ok; }; bool is_ok;} temporal_rs_Provider_new_zoneinfo64_result; +temporal_rs_Provider_new_zoneinfo64_result temporal_rs_Provider_new_zoneinfo64(DiplomatU32View data); + +Provider* temporal_rs_Provider_new_compiled(void); + +Provider* temporal_rs_Provider_empty(void); + +void temporal_rs_Provider_destroy(Provider* self); + + + + + +#endif // Provider_H diff --git a/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp b/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp new file mode 100644 index 000000000..84737f2c7 --- /dev/null +++ b/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp @@ -0,0 +1,62 @@ +#ifndef temporal_rs_Provider_D_HPP +#define temporal_rs_Provider_D_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + +namespace temporal_rs { +namespace capi { struct Provider; } +class Provider; +} + + +namespace temporal_rs { +namespace capi { + struct Provider; +} // namespace capi +} // namespace + +namespace temporal_rs { +/** + * A time zone data provider + */ +class Provider { +public: + + /** + * Construct a provider backed by a zoneinfo64.res file + * + * This failing to construct is not a Temporal error, so it just returns () + */ + inline static diplomat::result, std::monostate> new_zoneinfo64(diplomat::span data); + + inline static std::unique_ptr new_compiled(); + + /** + * Fallback type in case construction does not work. + */ + inline static std::unique_ptr empty(); + + inline const temporal_rs::capi::Provider* AsFFI() const; + inline temporal_rs::capi::Provider* AsFFI(); + inline static const temporal_rs::Provider* FromFFI(const temporal_rs::capi::Provider* ptr); + inline static temporal_rs::Provider* FromFFI(temporal_rs::capi::Provider* ptr); + inline static void operator delete(void* ptr); +private: + Provider() = delete; + Provider(const temporal_rs::Provider&) = delete; + Provider(temporal_rs::Provider&&) noexcept = delete; + Provider operator=(const temporal_rs::Provider&) = delete; + Provider operator=(temporal_rs::Provider&&) noexcept = delete; + static void operator delete[](void*, size_t) = delete; +}; + +} // namespace +#endif // temporal_rs_Provider_D_HPP diff --git a/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp b/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp new file mode 100644 index 000000000..ea25bd168 --- /dev/null +++ b/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp @@ -0,0 +1,70 @@ +#ifndef temporal_rs_Provider_HPP +#define temporal_rs_Provider_HPP + +#include "Provider.d.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include "../diplomat_runtime.hpp" + + +namespace temporal_rs { +namespace capi { + extern "C" { + + typedef struct temporal_rs_Provider_new_zoneinfo64_result {union {temporal_rs::capi::Provider* ok; }; bool is_ok;} temporal_rs_Provider_new_zoneinfo64_result; + temporal_rs_Provider_new_zoneinfo64_result temporal_rs_Provider_new_zoneinfo64(diplomat::capi::DiplomatU32View data); + + temporal_rs::capi::Provider* temporal_rs_Provider_new_compiled(void); + + temporal_rs::capi::Provider* temporal_rs_Provider_empty(void); + + void temporal_rs_Provider_destroy(Provider* self); + + } // extern "C" +} // namespace capi +} // namespace + +inline diplomat::result, std::monostate> temporal_rs::Provider::new_zoneinfo64(diplomat::span data) { + auto result = temporal_rs::capi::temporal_rs_Provider_new_zoneinfo64({data.data(), data.size()}); + return result.is_ok ? diplomat::result, std::monostate>(diplomat::Ok>(std::unique_ptr(temporal_rs::Provider::FromFFI(result.ok)))) : diplomat::result, std::monostate>(diplomat::Err()); +} + +inline std::unique_ptr temporal_rs::Provider::new_compiled() { + auto result = temporal_rs::capi::temporal_rs_Provider_new_compiled(); + return std::unique_ptr(temporal_rs::Provider::FromFFI(result)); +} + +inline std::unique_ptr temporal_rs::Provider::empty() { + auto result = temporal_rs::capi::temporal_rs_Provider_empty(); + return std::unique_ptr(temporal_rs::Provider::FromFFI(result)); +} + +inline const temporal_rs::capi::Provider* temporal_rs::Provider::AsFFI() const { + return reinterpret_cast(this); +} + +inline temporal_rs::capi::Provider* temporal_rs::Provider::AsFFI() { + return reinterpret_cast(this); +} + +inline const temporal_rs::Provider* temporal_rs::Provider::FromFFI(const temporal_rs::capi::Provider* ptr) { + return reinterpret_cast(ptr); +} + +inline temporal_rs::Provider* temporal_rs::Provider::FromFFI(temporal_rs::capi::Provider* ptr) { + return reinterpret_cast(ptr); +} + +inline void temporal_rs::Provider::operator delete(void* ptr) { + temporal_rs::capi::temporal_rs_Provider_destroy(reinterpret_cast(ptr)); +} + + +#endif // temporal_rs_Provider_HPP