Пример #1
0
 public static void ThrowErrors(this ValidationErrors errors, string message = "Validation has failed", object validatedObject = null)
 {
     if (!errors.IsValid())
     {
         throw new ValidationErrorException(errors, message, validatedObject);
     }
 }
Пример #2
0
        public static IEnumerable <string> ToErrorMessages(this ValidationErrors errors, string objPath = "")
        {
            if (errors.IsValid())
            {
                yield break;
            }

            foreach (var msg in errors.ErrorMessages)
            {
                if (objPath.Length > 0)
                {
                    yield return($"at {objPath}: {msg}");
                }
                else
                {
                    yield return(msg);
                }
            }
            foreach (var nested in errors.FieldErrors)
            {
                var path = objPath.Length == 0 ? nested.FieldName : objPath + "." + nested.FieldName;
                foreach (var msg in nested.ValidationErrors.ToErrorMessages(path))
                {
                    yield return(msg);
                }
            }
        }
Пример #3
0
        public static IEnumerable <(string[] path, string error)> EnumerateErrors(this ValidationErrors errors, string[] objPath = null)
        {
            if (errors.IsValid())
            {
                yield break;
            }
            objPath = objPath ?? Array.Empty <string>();

            foreach (var msg in errors.ErrorMessages)
            {
                if (objPath.Length > 0)
                {
                    yield return(objPath, msg);
                }
                else
                {
                    yield return(objPath, msg);
                }
            }
            foreach (var nested in errors.FieldErrors)
            {
                var path = new string[objPath.Length + 1];
                Array.Copy(objPath, path, objPath.Length);
                path[objPath.Length] = nested.FieldName;
                foreach (var msg in nested.ValidationErrors.EnumerateErrors(path))
                {
                    yield return(msg);
                }
            }
        }
Пример #4
0
 public static ValidationErrors Nest(this ValidationErrors errors, string field)
 {
     if (errors.IsValid())
     {
         return(errors);
     }
     return(new ValidationErrors(
                errorMessages: ImmutableArray <string> .Empty,
                fieldErrors: ImmutableArray.Create(new FieldValidationError(field, errors))
                ));
 }
Пример #5
0
 public T Expect(Func <ValidationErrors, Exception> makeException)
 {
     if (Errors == null)
     {
         throw new InvalidOperationException("Invalid object created.");
     }
     if (!Errors.IsValid())
     {
         throw makeException(Errors);
     }
     return(ValueOrDefault);
 }
Пример #6
0
        public static string ToErrorMessage(this ValidationErrors errors, string message = "Validation has failed", int softLengthLimit = 4096, string objPath = "", object validatedObject = null)
        {
            if (errors.IsValid())
            {
                var objName = validatedObject is null ? "" : " {" + validatedObject + "}";
                if (objPath.Length > 0)
                {
                    objName += " at " + objPath;
                }
                return($"Object{objName} is valid");
            }

            var result = new System.Text.StringBuilder();

            result.Append(message);
            if (validatedObject is object)
            {
                result.Append(" {").Append(validatedObject).Append("}");
            }
            result.Append(": ");

            var first = true;

            foreach (var msg in errors.ToErrorMessages(objPath))
            {
                if (softLengthLimit < result.Length && !first)
                {
                    result.Append(", ...");
                    break;
                }
                else if (!first)
                {
                    result.Append(", ");
                }
                else
                {
                    first = false;
                }

                result.Append(msg);
            }
            return(result.ToString());
        }
Пример #7
0
        public void Add(ValidationErrors errors)
        {
            if (errors.IsValid())
            {
                return;
            }

            if (this.r == null)
            {
                // TODO: pool the array
                this.r    = new ValidationErrors[4];
                this.r[0] = errors;
                this.index++;
                return;
            }

            if (this.index == this.r.Length)
            {
                Array.Resize(ref this.r, this.r.Length * 2);
            }
            this.r[this.index] = errors;
            this.index++;
        }