using System.Globalization; using System.Text.Json; using System.Text.Json.Serialization; namespace File_Folder_Helper.Models; internal record NginxFileSystem([property: JsonPropertyName("name")] string Name, DateTime? LastModified, [property: JsonPropertyName("mtime")] string MTime, Uri? URI, [property: JsonPropertyName("type")] string Type, [property: JsonPropertyName("size")] float? Length) { public override string ToString() { string result = JsonSerializer.Serialize(this, NginxFileSystemSourceGenerationContext.Default.NginxFileSystem); return result; } public static NginxFileSystem Get(string format, TimeZoneInfo timeZoneInfo, string name, string mTime, Uri uri, string type, float? size) { NginxFileSystem result; DateTime dateTime; DateTime? nullableDateTime; if (mTime.Length != format.Length + 4 || !DateTime.TryParseExact(mTime[..format.Length], format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime)) nullableDateTime = null; else nullableDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dateTime, mTime[(format.Length + 1)..], timeZoneInfo.Id); result = new(name, nullableDateTime, mTime, uri, type, size); return result; } public static string GetFormat() => "ddd, dd MMM yyyy HH:mm:ss"; public static NginxFileSystem Get(string format, TimeZoneInfo timeZoneInfo, Uri uri, NginxFileSystem nginxFileSystem) => Get(format, timeZoneInfo, nginxFileSystem.Name, nginxFileSystem.MTime, uri, nginxFileSystem.Type, nginxFileSystem.Length); } [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] [JsonSerializable(typeof(NginxFileSystem))] internal partial class NginxFileSystemSourceGenerationContext : JsonSerializerContext { } [JsonSourceGenerationOptions(WriteIndented = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull)] [JsonSerializable(typeof(NginxFileSystem[]))] internal partial class NginxFileSystemCollectionSourceGenerationContext : JsonSerializerContext { }