ZonedIsoDateTime.hpp (3011B)
1 #ifndef icu4x_ZonedIsoDateTime_HPP 2 #define icu4x_ZonedIsoDateTime_HPP 3 4 #include "ZonedIsoDateTime.d.hpp" 5 6 #include <stdio.h> 7 #include <stdint.h> 8 #include <stddef.h> 9 #include <stdbool.h> 10 #include <memory> 11 #include <functional> 12 #include <optional> 13 #include <cstdlib> 14 #include "../diplomat_runtime.hpp" 15 #include "IanaParser.hpp" 16 #include "IsoDate.hpp" 17 #include "Rfc9557ParseError.hpp" 18 #include "Time.hpp" 19 #include "TimeZoneInfo.hpp" 20 #include "UtcOffset.hpp" 21 #include "VariantOffsetsCalculator.hpp" 22 23 24 namespace icu4x { 25 namespace capi { 26 extern "C" { 27 28 typedef struct icu4x_ZonedIsoDateTime_full_from_string_mv1_result {union {icu4x::capi::ZonedIsoDateTime ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_ZonedIsoDateTime_full_from_string_mv1_result; 29 icu4x_ZonedIsoDateTime_full_from_string_mv1_result icu4x_ZonedIsoDateTime_full_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::IanaParser* iana_parser, const icu4x::capi::VariantOffsetsCalculator* offset_calculator); 30 31 icu4x::capi::ZonedIsoDateTime icu4x_ZonedIsoDateTime_from_epoch_milliseconds_and_utc_offset_mv1(int64_t epoch_milliseconds, const icu4x::capi::UtcOffset* utc_offset); 32 33 } // extern "C" 34 } // namespace capi 35 } // namespace 36 37 inline diplomat::result<icu4x::ZonedIsoDateTime, icu4x::Rfc9557ParseError> icu4x::ZonedIsoDateTime::full_from_string(std::string_view v, const icu4x::IanaParser& iana_parser, const icu4x::VariantOffsetsCalculator& offset_calculator) { 38 auto result = icu4x::capi::icu4x_ZonedIsoDateTime_full_from_string_mv1({v.data(), v.size()}, 39 iana_parser.AsFFI(), 40 offset_calculator.AsFFI()); 41 return result.is_ok ? diplomat::result<icu4x::ZonedIsoDateTime, icu4x::Rfc9557ParseError>(diplomat::Ok<icu4x::ZonedIsoDateTime>(icu4x::ZonedIsoDateTime::FromFFI(result.ok))) : diplomat::result<icu4x::ZonedIsoDateTime, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 42 } 43 44 inline icu4x::ZonedIsoDateTime icu4x::ZonedIsoDateTime::from_epoch_milliseconds_and_utc_offset(int64_t epoch_milliseconds, const icu4x::UtcOffset& utc_offset) { 45 auto result = icu4x::capi::icu4x_ZonedIsoDateTime_from_epoch_milliseconds_and_utc_offset_mv1(epoch_milliseconds, 46 utc_offset.AsFFI()); 47 return icu4x::ZonedIsoDateTime::FromFFI(result); 48 } 49 50 51 inline icu4x::capi::ZonedIsoDateTime icu4x::ZonedIsoDateTime::AsFFI() const { 52 return icu4x::capi::ZonedIsoDateTime { 53 /* .date = */ date->AsFFI(), 54 /* .time = */ time->AsFFI(), 55 /* .zone = */ zone->AsFFI(), 56 }; 57 } 58 59 inline icu4x::ZonedIsoDateTime icu4x::ZonedIsoDateTime::FromFFI(icu4x::capi::ZonedIsoDateTime c_struct) { 60 return icu4x::ZonedIsoDateTime { 61 /* .date = */ std::unique_ptr<icu4x::IsoDate>(icu4x::IsoDate::FromFFI(c_struct.date)), 62 /* .time = */ std::unique_ptr<icu4x::Time>(icu4x::Time::FromFFI(c_struct.time)), 63 /* .zone = */ std::unique_ptr<icu4x::TimeZoneInfo>(icu4x::TimeZoneInfo::FromFFI(c_struct.zone)), 64 }; 65 } 66 67 68 #endif // icu4x_ZonedIsoDateTime_HPP