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("}"); } } } }
/// <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("}"); } } } }