Files
Libation/Source/LibationSearchEngine/IndexRule.cs
Michael Bucari-Tovo 3ab1edc076 Code Cleanup
Make fields readonly
Remove unnecessary casts
Format document
Remove unnecessary usings
Sort usings
Use file-level namespaces
Order modifiers
2026-02-05 12:48:44 -07:00

43 lines
1.2 KiB
C#

using DataLayer;
using Dinah.Core;
using System;
using System.Collections.ObjectModel;
using System.Linq;
namespace LibationSearchEngine;
public enum FieldType
{
Bool,
String,
Number,
ID,
Raw
}
public class IndexRule
{
public FieldType FieldType { get; }
public Func<LibraryBook, string?> GetValue { get; }
public ReadOnlyCollection<string> FieldNames { get; }
public IndexRule(FieldType fieldType, Func<LibraryBook, string?> valueGetter, params string[] fieldNames)
{
ArgumentValidator.EnsureNotNull(valueGetter, nameof(valueGetter));
ArgumentValidator.EnsureNotNull(fieldNames, nameof(fieldNames));
ArgumentValidator.EnsureGreaterThan(fieldNames.Length, $"{nameof(fieldNames)}.{nameof(fieldNames.Length)}", 0);
var fieldNamesValidated
= fieldNames
.Select((n, i) => ArgumentValidator.EnsureNotNullOrWhiteSpace(n, $"{nameof(fieldNames)}[{i}]")
.Trim());
GetValue = valueGetter;
FieldType = fieldType;
FieldNames = new ReadOnlyCollection<string>(fieldNamesValidated.ToList());
}
public override string ToString()
=> FieldNames.Count == 1
? $"{FieldNames.First()}"
: $"{FieldNames.First()} ({string.Join(", ", FieldNames.Skip(1))})";
}