using System; using System.Collections.Generic; using System.Linq.Expressions; using FluentValidation; using FluentValidation.Internal; using FluentValidation.Resources; using NzbDrone.Api.ClientSchema; using System.Linq; namespace NzbDrone.Api.REST { public class ResourceValidator : AbstractValidator { public IRuleBuilderInitial RuleForField(Expression>> fieldListAccessor, string fieldName) { var rule = new PropertyRule(fieldListAccessor.GetMember(), c => GetValue(c, fieldListAccessor.Compile(), fieldName), null, () => CascadeMode.Continue, typeof(TProperty), typeof(TResource)); rule.PropertyName += "." + fieldName; rule.DisplayName = new StaticStringSource(fieldName); AddRule(rule); return new RuleBuilder(rule); } private static object GetValue(object container, Func> fieldListAccessor, string fieldName) { var resource = fieldListAccessor((TResource)container).SingleOrDefault(c => c.Name == fieldName); if (resource == null) { return null; } return resource.Value; } } }