/* * Copyright (c) 2021-2022, Linus Groh * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace JS::Temporal { struct Annotation { bool critical { false }; StringView key; StringView value; }; struct TimeZoneOffset { Optional sign; Optional hours; Optional minutes; Optional seconds; Optional fraction; StringView source_text; }; struct ParseResult { Optional sign; Optional date_year; Optional date_month; Optional date_day; Optional time_hour; Optional time_minute; Optional time_second; Optional time_fraction; Optional date_time_offset; Optional utc_designator; Optional time_zone_identifier; Optional time_zone_iana_name; Optional time_zone_offset; Optional duration_years; Optional duration_months; Optional duration_weeks; Optional duration_days; Optional duration_hours; Optional duration_hours_fraction; Optional duration_minutes; Optional duration_minutes_fraction; Optional duration_seconds; Optional duration_seconds_fraction; Vector annotations; }; enum class Production { AnnotationValue, DateMonth, TemporalDateTimeString, TemporalDurationString, TemporalInstantString, TemporalMonthDayString, TemporalTimeString, TemporalYearMonthString, TemporalZonedDateTimeString, TimeZoneIdentifier, }; Optional parse_iso8601(Production, StringView); enum class SubMinutePrecision { No, Yes, }; Optional parse_utc_offset(StringView, SubMinutePrecision); }