예제 #1
0
        private static void AppendConstraintValidations(string valueReference, Dictionary <Constraint, string> constraints, IndentedStringBuilder sb, KnownFormat format)
        {
            foreach (var constraint in constraints.Keys)
            {
                string constraintCheck;
                string constraintValue = (format == KnownFormat.@char) ?$"'{constraints[constraint]}'" : constraints[constraint];
                switch (constraint)
                {
                case Constraint.ExclusiveMaximum:
                    constraintCheck = $"{valueReference} >= {constraintValue}";
                    break;

                case Constraint.ExclusiveMinimum:
                    constraintCheck = $"{valueReference} <= {constraintValue}";
                    break;

                case Constraint.InclusiveMaximum:
                    constraintCheck = $"{valueReference} > {constraintValue}";
                    break;

                case Constraint.InclusiveMinimum:
                    constraintCheck = $"{valueReference} < {constraintValue}";
                    break;

                case Constraint.MaxItems:
                    constraintCheck = $"{valueReference}.Count > {constraintValue}";
                    break;

                case Constraint.MaxLength:
                    constraintCheck = $"{valueReference}.Length > {constraintValue}";
                    break;

                case Constraint.MinItems:
                    constraintCheck = $"{valueReference}.Count < {constraintValue}";
                    break;

                case Constraint.MinLength:
                    constraintCheck = $"{valueReference}.Length < {constraintValue}";
                    break;

                case Constraint.MultipleOf:
                    constraintCheck = $"{valueReference} % {constraintValue} != 0";
                    break;

                case Constraint.Pattern:
                    constraintValue = $"\"{constraintValue.Replace("\\", "\\\\")}\"";
                    constraintCheck = $"!System.Text.RegularExpressions.Regex.IsMatch({valueReference}, {constraintValue})";
                    break;

                case Constraint.UniqueItems:
                    if ("true".Equals(constraints[constraint], StringComparison.OrdinalIgnoreCase))
                    {
                        constraintCheck = $"{valueReference}.Count != {valueReference}.Distinct().Count()";
                    }
                    else
                    {
                        constraintCheck = null;
                    }
                    break;

                default:
                    throw new NotSupportedException("Constraint '" + constraint + "' is not supported.");
                }
                if (constraintCheck != null)
                {
                    if (constraint != Constraint.UniqueItems)
                    {
                        sb.AppendLine("if ({0})", constraintCheck)
                        .AppendLine("{").Indent()
                        .AppendLine("throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.{0}, \"{1}\", {2});",
                                    constraint, valueReference.Replace("this.", ""), constraintValue).Outdent()
                        .AppendLine("}");
                    }
                    else
                    {
                        sb.AppendLine("if ({0})", constraintCheck)
                        .AppendLine("{").Indent()
                        .AppendLine("throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.{0}, \"{1}\");",
                                    constraint, valueReference.Replace("this.", "")).Outdent()
                        .AppendLine("}");
                    }
                }
            }
        }
예제 #2
0
 /// <summary>
 /// Returns true if the format is a date/time.
 /// </summary>
 /// <param name="format">The format type to check.</param>
 /// <returns>True if the format is a date/time.</returns>
 public static bool IsDateTime(this KnownFormat format)
 {
     return(format == KnownFormat.date ||
            format == KnownFormat.date_time ||
            format == KnownFormat.date_time_rfc1123);
 }
 private static void AppendConstraintValidations(string valueReference, Dictionary<Constraint, string> constraints, IndentedStringBuilder sb, KnownFormat format)
 {
     foreach (var constraint in constraints.Keys)
     {
         string constraintCheck;
         string constraintValue = (format == KnownFormat.@char) ?$"'{constraints[constraint]}'" : constraints[constraint];
         switch (constraint)
         {
             case Constraint.ExclusiveMaximum:
                 constraintCheck = $"{valueReference} >= {constraintValue}";
                 break;
             case Constraint.ExclusiveMinimum:
                 constraintCheck = $"{valueReference} <= {constraintValue}";
                 break;
             case Constraint.InclusiveMaximum:
                 constraintCheck = $"{valueReference} > {constraintValue}";
                 break;
             case Constraint.InclusiveMinimum:
                 constraintCheck = $"{valueReference} < {constraintValue}";
                 break;
             case Constraint.MaxItems:
                 constraintCheck = $"{valueReference}.Count > {constraintValue}";
                 break;
             case Constraint.MaxLength:
                 constraintCheck = $"{valueReference}.Length > {constraintValue}";
                 break;
             case Constraint.MinItems:
                 constraintCheck = $"{valueReference}.Count < {constraintValue}";
                 break;
             case Constraint.MinLength:
                 constraintCheck = $"{valueReference}.Length < {constraintValue}";
                 break;
             case Constraint.MultipleOf:
                 constraintCheck = $"{valueReference} % {constraintValue} != 0";
                 break;
             case Constraint.Pattern:
                 constraintValue = $"\"{constraintValue.Replace("\\", "\\\\")}\"";
                 constraintCheck = $"!System.Text.RegularExpressions.Regex.IsMatch({valueReference}, {constraintValue})";
                 break;
             case Constraint.UniqueItems:
                 if ("true".EqualsIgnoreCase(constraints[constraint]))
                 {
                     constraintCheck = $"{valueReference}.Count != {valueReference}.Distinct().Count()";
                 }
                 else
                 {
                     constraintCheck = null;
                 }
                 break;
             default:
                 throw new NotSupportedException("Constraint '" + constraint + "' is not supported.");
         }
         if (constraintCheck != null)
         {
             if (constraint != Constraint.UniqueItems)
             {
                 sb.AppendLine("if ({0})", constraintCheck)
                     .AppendLine("{").Indent()
                     .AppendLine("throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.{0}, \"{1}\", {2});",
                         constraint, valueReference.Replace("this.", ""), constraintValue).Outdent()
                     .AppendLine("}");
             }
             else
             {
                 sb.AppendLine("if ({0})", constraintCheck)
                     .AppendLine("{").Indent()
                     .AppendLine("throw new Microsoft.Rest.ValidationException(Microsoft.Rest.ValidationRules.{0}, \"{1}\");",
                         constraint, valueReference.Replace("this.", "")).Outdent()
                     .AppendLine("}");
             }
         }
     }
 }