using System.Text.Json.Serialization; namespace EnvelopeGenerator.Web.Models; public class AnnotationParams { [JsonIgnore] public Annotation? DefaultAnnotation { get; init; } private readonly IEnumerable _annots = new List(); public Annotation this[string name] => _annots.First(a => a.Name == name); public bool TryGet(string name, out Annotation annotation) { #pragma warning disable CS8601 // Possible null reference assignment. annotation = _annots.FirstOrDefault(a => a.Name == name); #pragma warning restore CS8601 // Possible null reference assignment. return annotation is not null; } public required IEnumerable Annotations { get => _annots; init { _annots = value; if (DefaultAnnotation is not null) foreach (var annot in _annots) annot.Default = DefaultAnnotation; foreach (var annot in _annots) { #region set bound annotations // horizontal if (annot.HorBoundAnnotName is string horBoundAnnotName) if (TryGet(horBoundAnnotName, out var horBoundAnnot)) annot.HorBoundAnnot = horBoundAnnot; else throw new InvalidOperationException($"{horBoundAnnotName} added as bound anotation. However, it is not defined."); // vertical if (annot.VerBoundAnnotName is string verBoundAnnotName) if (TryGet(verBoundAnnotName, out var verBoundAnnot)) annot.VerBoundAnnot = verBoundAnnot; else throw new InvalidOperationException($"{verBoundAnnotName} added as bound anotation. However, it is not defined."); #endregion } AnnotationDictionary = _annots.ToDictionary(a => a.Name.ToLower(), a => a); } } public Dictionary AnnotationDictionary { get; private init; } = new(); }