// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; using EpicGames.Core; using EpicGames.Horde.Utilities; namespace EpicGames.Horde.Jobs.Schedules { /// /// Time of day value for a schedule /// [JsonSchemaString] [JsonConverter(typeof(ScheduleIntervalJsonConverter))] public record class ScheduleInterval(int Minutes) { /// /// Parse a string as a time of day /// [return: NotNullIfNotNull("text")] public static ScheduleInterval? Parse(string? text) => (text != null) ? new ScheduleInterval((int)IntervalJsonConverter.Parse(text).TotalMinutes) : null; } class ScheduleIntervalJsonConverter : JsonConverter { /// public override ScheduleInterval? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.Number) { return new ScheduleInterval(reader.GetInt32()); } else { return ScheduleInterval.Parse(reader.GetString()); } } /// public override void Write(Utf8JsonWriter writer, ScheduleInterval value, JsonSerializerOptions options) { writer.WriteNumberValue(value.Minutes); } } }