public Task <DryvResultMessage> ValidateAsync(DryvCompiledRule rule, object model, Func <Type, object> objectFactory) { Compile(rule); var options = GetPreevaluationOptions(rule, objectFactory); var result = rule.CompiledValidationExpression(model, options); switch (result) { case DryvResultMessage dryvResult: return(Task.FromResult(dryvResult)); case Task <DryvResultMessage> task: return(task); default: throw new InvalidOperationException($"Compiled validation expression for property {rule.Property.DeclaringType.FullName}.{rule.Property.Name} should return '{result.GetType().FullName}'. Only DryvResultMessage and Task<DryvResultMessage> are allowed."); } }
public bool IsDisabled(DryvCompiledRule rule, object model, Func <Type, object> objectFactory) { if (rule.ValidationExpression.ReturnType != typeof(bool)) { return(false); } Compile(rule); var options = GetPreevaluationOptions(rule, objectFactory); try { return((bool)rule.CompiledValidationExpression(model, options)); } catch (Exception ex) { throw new DryvValidationExecutionException(rule, ex); } }
public DryvResultMessage Validate(DryvCompiledRule rule, object model, Func <Type, object> objectFactory) { if (typeof(Task).IsAssignableFrom(rule.ValidationExpression.ReturnType)) { return(DryvResultMessage.Success); } Compile(rule); var options = GetPreevaluationOptions(rule, objectFactory); try { return((DryvResultMessage)rule.CompiledValidationExpression(model, options)); } catch (Exception ex) { throw new DryvValidationExecutionException(rule, ex); } }