ZonedDateTime.hpp (5782B)
1 #ifndef icu4x_ZonedDateTime_HPP 2 #define icu4x_ZonedDateTime_HPP 3 4 #include "ZonedDateTime.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 "Calendar.hpp" 16 #include "Date.hpp" 17 #include "IanaParser.hpp" 18 #include "Rfc9557ParseError.hpp" 19 #include "Time.hpp" 20 #include "TimeZoneInfo.hpp" 21 #include "VariantOffsetsCalculator.hpp" 22 23 24 namespace icu4x { 25 namespace capi { 26 extern "C" { 27 28 typedef struct icu4x_ZonedDateTime_full_from_string_mv1_result {union {icu4x::capi::ZonedDateTime ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_ZonedDateTime_full_from_string_mv1_result; 29 icu4x_ZonedDateTime_full_from_string_mv1_result icu4x_ZonedDateTime_full_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::Calendar* calendar, const icu4x::capi::IanaParser* iana_parser, const icu4x::capi::VariantOffsetsCalculator* offset_calculator); 30 31 typedef struct icu4x_ZonedDateTime_location_only_from_string_mv1_result {union {icu4x::capi::ZonedDateTime ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_ZonedDateTime_location_only_from_string_mv1_result; 32 icu4x_ZonedDateTime_location_only_from_string_mv1_result icu4x_ZonedDateTime_location_only_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::Calendar* calendar, const icu4x::capi::IanaParser* iana_parser); 33 34 typedef struct icu4x_ZonedDateTime_offset_only_from_string_mv1_result {union {icu4x::capi::ZonedDateTime ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_ZonedDateTime_offset_only_from_string_mv1_result; 35 icu4x_ZonedDateTime_offset_only_from_string_mv1_result icu4x_ZonedDateTime_offset_only_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::Calendar* calendar); 36 37 typedef struct icu4x_ZonedDateTime_lenient_from_string_mv1_result {union {icu4x::capi::ZonedDateTime ok; icu4x::capi::Rfc9557ParseError err;}; bool is_ok;} icu4x_ZonedDateTime_lenient_from_string_mv1_result; 38 icu4x_ZonedDateTime_lenient_from_string_mv1_result icu4x_ZonedDateTime_lenient_from_string_mv1(diplomat::capi::DiplomatStringView v, const icu4x::capi::Calendar* calendar, const icu4x::capi::IanaParser* iana_parser); 39 40 } // extern "C" 41 } // namespace capi 42 } // namespace 43 44 inline diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError> icu4x::ZonedDateTime::full_from_string(std::string_view v, const icu4x::Calendar& calendar, const icu4x::IanaParser& iana_parser, const icu4x::VariantOffsetsCalculator& offset_calculator) { 45 auto result = icu4x::capi::icu4x_ZonedDateTime_full_from_string_mv1({v.data(), v.size()}, 46 calendar.AsFFI(), 47 iana_parser.AsFFI(), 48 offset_calculator.AsFFI()); 49 return result.is_ok ? diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Ok<icu4x::ZonedDateTime>(icu4x::ZonedDateTime::FromFFI(result.ok))) : diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 50 } 51 52 inline diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError> icu4x::ZonedDateTime::location_only_from_string(std::string_view v, const icu4x::Calendar& calendar, const icu4x::IanaParser& iana_parser) { 53 auto result = icu4x::capi::icu4x_ZonedDateTime_location_only_from_string_mv1({v.data(), v.size()}, 54 calendar.AsFFI(), 55 iana_parser.AsFFI()); 56 return result.is_ok ? diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Ok<icu4x::ZonedDateTime>(icu4x::ZonedDateTime::FromFFI(result.ok))) : diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 57 } 58 59 inline diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError> icu4x::ZonedDateTime::offset_only_from_string(std::string_view v, const icu4x::Calendar& calendar) { 60 auto result = icu4x::capi::icu4x_ZonedDateTime_offset_only_from_string_mv1({v.data(), v.size()}, 61 calendar.AsFFI()); 62 return result.is_ok ? diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Ok<icu4x::ZonedDateTime>(icu4x::ZonedDateTime::FromFFI(result.ok))) : diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 63 } 64 65 inline diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError> icu4x::ZonedDateTime::lenient_from_string(std::string_view v, const icu4x::Calendar& calendar, const icu4x::IanaParser& iana_parser) { 66 auto result = icu4x::capi::icu4x_ZonedDateTime_lenient_from_string_mv1({v.data(), v.size()}, 67 calendar.AsFFI(), 68 iana_parser.AsFFI()); 69 return result.is_ok ? diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Ok<icu4x::ZonedDateTime>(icu4x::ZonedDateTime::FromFFI(result.ok))) : diplomat::result<icu4x::ZonedDateTime, icu4x::Rfc9557ParseError>(diplomat::Err<icu4x::Rfc9557ParseError>(icu4x::Rfc9557ParseError::FromFFI(result.err))); 70 } 71 72 73 inline icu4x::capi::ZonedDateTime icu4x::ZonedDateTime::AsFFI() const { 74 return icu4x::capi::ZonedDateTime { 75 /* .date = */ date->AsFFI(), 76 /* .time = */ time->AsFFI(), 77 /* .zone = */ zone->AsFFI(), 78 }; 79 } 80 81 inline icu4x::ZonedDateTime icu4x::ZonedDateTime::FromFFI(icu4x::capi::ZonedDateTime c_struct) { 82 return icu4x::ZonedDateTime { 83 /* .date = */ std::unique_ptr<icu4x::Date>(icu4x::Date::FromFFI(c_struct.date)), 84 /* .time = */ std::unique_ptr<icu4x::Time>(icu4x::Time::FromFFI(c_struct.time)), 85 /* .zone = */ std::unique_ptr<icu4x::TimeZoneInfo>(icu4x::TimeZoneInfo::FromFFI(c_struct.zone)), 86 }; 87 } 88 89 90 #endif // icu4x_ZonedDateTime_HPP