using DataLayer; using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace LibationSearchEngine; public class IndexRuleCollection : IEnumerable { private readonly List rules = new(); public IEnumerable IdFieldNames => rules.Where(x => x.FieldType is FieldType.ID).SelectMany(r => r.FieldNames); public IEnumerable BoolFieldNames => rules.Where(x => x.FieldType is FieldType.Bool).SelectMany(r => r.FieldNames); public IEnumerable StringFieldNames => rules.Where(x => x.FieldType is FieldType.String).SelectMany(r => r.FieldNames); public IEnumerable NumberFieldNames => rules.Where(x => x.FieldType is FieldType.Number).SelectMany(r => r.FieldNames); public void Add(FieldType fieldType, Func getter, params string[] fieldNames) => rules.Add(new LibraryBookRule(fieldType, getter, fieldNames)); public void Add(FieldType fieldType, Func getter, params string[] fieldNames) => rules.Add(new BookRule(fieldType, getter, fieldNames)); public T GetRuleByFieldName(string fieldName) where T : IIndexRule => (T)rules.SingleOrDefault(r => r.FieldNames.Any(n => n.Equals(fieldName, StringComparison.OrdinalIgnoreCase))); public IEnumerator GetEnumerator() => rules.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }