using Bit.Core.AdminConsole.Errors; namespace Bit.Core.AdminConsole.Shared.Validation; public abstract record ValidationResult; public record Valid : ValidationResult { public Valid() { } public Valid(T Value) { this.Value = Value; } public T Value { get; init; } } public record Invalid : ValidationResult { public IEnumerable> Errors { get; init; } = []; public string ErrorMessageString => string.Join(" ", Errors.Select(e => e.Message)); public Invalid() { } public Invalid(Error error) : this([error]) { } public Invalid(IEnumerable> errors) { Errors = errors; } } public static class ValidationResultMappers { public static ValidationResult Map(this ValidationResult validationResult, B invalidValue) => validationResult switch { Valid => new Valid(invalidValue), Invalid invalid => new Invalid(invalid.Errors.Select(x => x.ToError(invalidValue))), _ => throw new ArgumentOutOfRangeException(nameof(validationResult), "Unhandled validation result type") }; }