/* * Copyright (c) 2021, Idan Horowitz * Copyright (c) 2021, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace JS::Temporal { enum class OptionType { Boolean, String, Number }; struct ISODateTime { i32 year; i32 month; i32 day; i32 hour; i32 minute; i32 second; i32 millisecond; i32 microsecond; i32 nanosecond; Optional calendar; }; struct TemporalInstant { i32 year; i32 month; i32 day; i32 hour; i32 minute; i32 second; i32 millisecond; i32 microsecond; i32 nanosecond; Optional time_zone_offset; }; struct TemporalTimeZone { bool z; Optional offset; Optional name; }; Object* get_options_object(GlobalObject&, Value options); Value get_option(GlobalObject&, Object& options, String const& property, Vector const& types, Vector const& values, Value fallback); String to_temporal_rounding_mode(GlobalObject&, Object& normalized_options, String const& fallback); u64 to_temporal_rounding_increment(GlobalObject&, Object& normalized_options, Optional dividend, bool inclusive); Optional to_smallest_temporal_unit(GlobalObject&, Object& normalized_options, Vector const& disallowed_units, Optional fallback); BigInt* round_number_to_increment(GlobalObject&, BigInt const&, u64 increment, String const& rounding_mode); Optional parse_iso_date_time(GlobalObject&, String const& iso_string); Optional parse_temporal_instant_string(GlobalObject&, String const& iso_string); String parse_temporal_calendar_string(GlobalObject&, String const& iso_string); Optional parse_temporal_duration_string(GlobalObject&, String const& iso_string); Optional parse_temporal_time_zone_string(GlobalObject&, String const& iso_string); }