public ModelStateBuilder <T> SetFieldError(string fieldName, ProblemDetailsFieldType errorType, string message = null, Func <ProblemDetailsFieldType, bool> addOnly = null)
        {
            if (addOnly == null || addOnly(errorType))
            {
                this._controller.ModelState.TryAddModelError(fieldName, ProblemDetailsFactory.GetComposeTypeAndErrorMessage(errorType, message));
            }

            return(this);
        }
        public bool HasProblem(Expression <Func <T, object> > expression, ProblemDetailsFieldType errorType)
        {
            string typeName  = Enum.GetName(typeof(ProblemDetailsFieldType), errorType);
            var    fieldName = GetFieldName(expression);

            if (this._controller.ModelState.ContainsKey(fieldName))
            {
                foreach (var e in this._controller.ModelState[fieldName].Errors)
                {
                    if (e.ErrorMessage.StartsWith(typeName))
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
 public static IRuleBuilderOptions <T, TProperty> WithMessage <T, TProperty>(this IRuleBuilderOptions <T, TProperty> rule, ProblemDetailsFieldType type, string errorMessage)
 {
     rule.WithMessage(ProblemDetailsFactory.GetComposeTypeAndErrorMessage(type, errorMessage));
     return(rule);
 }
        public static string GetComposeTypeAndErrorMessage(ProblemDetailsFieldType errorType, string message)
        {
            string typeName = Enum.GetName(typeof(ProblemDetailsFieldType), errorType);

            return($"{typeName}/{message}");
        }
        public ModelStateBuilder <T> SetFieldError(Expression <Func <T, object> > expression, ProblemDetailsFieldType errorType, string message = null, Func <ProblemDetailsFieldType, bool> addOnly = null)
        {
            var fieldName = GetFieldName(expression);

            return(SetFieldError(fieldName, errorType, message, addOnly));
        }