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; } [JsonIgnore] public IEnumerable Names => _annots.Select(annot => annot.Name); public required IEnumerable Annotations { get => _annots; init { _annots = value; if (DefaultAnnotation is not null) foreach (var annot in _annots) annot.Default = DefaultAnnotation; foreach (var name in Names) { #region set bound annotations // horizontal if (this[name].HorBoundAnnotName is string horBoundAnnotName) if (TryGet(horBoundAnnotName, out var horBoundAnnot)) this[name].HorBoundAnnot = horBoundAnnot; else throw new InvalidOperationException($"{horBoundAnnotName} added as bound anotation. However, it is not defined."); // vertical if (this[name].VerBoundAnnotName is string verBoundAnnotName) if (TryGet(verBoundAnnotName, out var verBoundAnnot)) this[name].VerBoundAnnot = verBoundAnnot; else throw new InvalidOperationException($"{verBoundAnnotName} added as bound anotation. However, it is not defined."); #endregion } } } }