using System.ComponentModel.DataAnnotations; using System.Text.Json; using System.Text.Json.Serialization; namespace WinLog.Models.Binder; public class AppSettings { #nullable disable [Display(Name = "Date Format"), Required] public string DateFormat { get; set; } [Display(Name = "Directory"), Required] public string Directory { get; set; } [Display(Name = "Log Filter"), Required] public string LogFilter { get; set; } [Display(Name = "Message Filter"), Required] public string[] MessageFilters { get; set; } [Display(Name = "Monitor Application Resource"), Required] public string MonitorApplicationResource { get; set; } [Display(Name = "Monitor Application Site"), Required] public string MonitorApplicationSite { get; set; } [Display(Name = "Milliseconds Delay"), Required] public int? MillisecondsDelay { get; set; } [Display(Name = "Rolling Minutes"), Required] public int? RollingMinutes { get; set; } #nullable restore public override string ToString() { string result = JsonSerializer.Serialize(this, BinderAppSettingsSourceGenerationContext.Default.AppSettings); return result; } private static Models.AppSettings Get(AppSettings? appSettings) { Models.AppSettings result; if (appSettings?.DateFormat is null) throw new NullReferenceException(nameof(DateFormat)); if (appSettings?.Directory is null) throw new NullReferenceException(nameof(Directory)); if (appSettings?.LogFilter is null) throw new NullReferenceException(nameof(LogFilter)); if (appSettings?.MessageFilters is null) throw new NullReferenceException(nameof(MessageFilters)); if (appSettings?.MillisecondsDelay is null) throw new NullReferenceException(nameof(MillisecondsDelay)); if (appSettings?.MonitorApplicationResource is null) throw new NullReferenceException(nameof(MonitorApplicationResource)); if (appSettings?.MonitorApplicationSite is null) throw new NullReferenceException(nameof(MonitorApplicationSite)); if (appSettings?.RollingMinutes is null) throw new NullReferenceException(nameof(RollingMinutes)); result = new(appSettings.DateFormat, appSettings.Directory, appSettings.LogFilter, appSettings.MessageFilters, appSettings.MonitorApplicationResource, appSettings.MonitorApplicationSite, appSettings.MillisecondsDelay.Value, appSettings.RollingMinutes.Value); return result; } public static Models.AppSettings Get(IConfiguration configuration) { Models.AppSettings result; #pragma warning disable IL3050, IL2026 AppSettings? appSettings = configuration.Get(); #pragma warning restore IL3050, IL2026 result = Get(appSettings); return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(AppSettings))] internal partial class BinderAppSettingsSourceGenerationContext : JsonSerializerContext { }