private static CodegenType InternalMakeCodegenType(string name, Schema schema) { if (!string.IsNullOrWhiteSpace(schema.ReferenceType)) { throw new InvalidOperationException("We don't support de-referencing here."); } if (!(schema.Type?.Count >= 1)) { throw new InvalidOperationException("This Schema does not represent a type"); } if (schema.AdditionalProperties == null) { if (schema.Type.Count == 1 && !schema.Type[0].IsReference && schema.Type[0].Name == "array") { return(ArrayValueCodegenTypeFactory.MakeCodegenType(name, schema)); } return(SingleValueCodegenTypeFactory.MakeCodegenType(name, schema)); } if (schema.Type.Count == 1 && schema.Type[0].Name == "object") { return(MakeDictionaryType(name, schema)); } throw new InvalidOperationException(); }
private static CodegenType InternalMakeCodegenType(string name, Schema schema) { if (schema.Disallowed != null || schema.Pattern != null) { throw new NotImplementedException(); } if (schema.ReferenceType != null) { throw new InvalidOperationException("We don't support de-referencing here."); } if (!(schema.Type?.Length >= 1)) { throw new InvalidOperationException("This Schema does not represent a type"); } if (schema.DictionaryValueType == null) { if (schema.Type.Length == 1 && !schema.Type[0].IsReference && schema.Type[0].Name == "array") { return(ArrayValueCodegenTypeFactory.MakeCodegenType(name, schema)); } return(SingleValueCodegenTypeFactory.MakeCodegenType(name, schema)); } if (schema.Type.Length == 1 && schema.Type[0].Name == "object") { return(MakeDictionaryType(name, schema)); } throw new InvalidOperationException(); }
private static CodegenType InternalMakeCodegenType(string name, JSchema schema) { if (schema.Reference != null) { throw new InvalidOperationException("We don't support de-referencing here."); } if (schema.AdditionalProperties == null) { if (schema.Type == JSchemaType.Array) { return(ArrayValueCodegenTypeFactory.MakeCodegenType(name, schema)); } return(SingleValueCodegenTypeFactory.MakeCodegenType(name, schema)); } if (schema.Type == JSchemaType.Object) { return(MakeDictionaryType(name, schema)); } throw new InvalidOperationException(); }
public static CodegenType MakeCodegenType(string name, Schema Schema) { if (!(Schema.Items?.Type?.Length > 0)) { throw new InvalidOperationException("Array type must contain an item type"); } if (Schema.Enum != null) { throw new InvalidOperationException(); } if (Schema.Items.Disallowed != null) { throw new NotImplementedException(); } var returnType = new CodegenType(); returnType.Attributes.Add(new CodeAttributeDeclaration("Newtonsoft.Json.JsonConverterAttribute", new [] { new CodeAttributeArgument(new CodeTypeOfExpression(typeof(ArrayConverter))) })); if (Schema.Items.Type.Length > 1) { returnType.CodeType = new CodeTypeReference(typeof(object[])); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); return(returnType); } EnforceRestrictionsOnSetValues(returnType, name, Schema); if (Schema.Items.Type[0].Name == "integer") { if (Schema.Items.Enum != null) { var enumType = SingleValueCodegenTypeFactory.GenIntEnumType(name, Schema.Items); returnType.AdditionalMembers.Add(enumType); if (Schema.HasDefaultValue()) { var defaultValueArray = ((JArray)Schema.Default).Select(x => (CodeExpression)SingleValueCodegenTypeFactory.GetEnumField(enumType, (int)(long)x)).ToArray(); returnType.DefaultValue = new CodeArrayCreateExpression(enumType.Name, defaultValueArray); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheArrayOfValueOfAMemberIsNotEqualToAnotherExpression(name, returnType.DefaultValue)); } else { returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); } returnType.CodeType = new CodeTypeReference(enumType.Name + "[]"); return(returnType); } if (Schema.HasDefaultValue()) { var defaultValueArray = ((JArray)Schema.Default).Select( x => (CodeExpression) new CodePrimitiveExpression((int)(long)x)).ToArray(); returnType.DefaultValue = new CodeArrayCreateExpression(typeof(int), defaultValueArray); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheArrayOfValueOfAMemberIsNotEqualToAnotherExpression(name, returnType.DefaultValue)); } else { returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); } returnType.CodeType = new CodeTypeReference(typeof(int[])); return(returnType); } if (Schema.Items.Enum != null) { throw new NotImplementedException(); } if (Schema.Items.Type[0].Name == "number") { if (Schema.HasDefaultValue()) { var defaultVauleArray = (JArray)Schema.Default; returnType.DefaultValue = new CodeArrayCreateExpression(typeof(float), defaultVauleArray.Select(x => (CodeExpression) new CodePrimitiveExpression((float)x)).ToArray()); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheArrayOfValueOfAMemberIsNotEqualToAnotherExpression(name, returnType.DefaultValue)); } else { returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); } returnType.CodeType = new CodeTypeReference(typeof(float[])); return(returnType); } if (Schema.Items.Minimum != null || Schema.Items.Maximum != null) { throw new NotImplementedException(); } if (Schema.Items.Type[0].Name == "boolean") { if (Schema.HasDefaultValue()) { var defaultVauleArray = (JArray)Schema.Default; returnType.DefaultValue = new CodeArrayCreateExpression(typeof(bool), defaultVauleArray.Select(x => (CodeExpression) new CodePrimitiveExpression((bool)x)).ToArray()); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheArrayOfValueOfAMemberIsNotEqualToAnotherExpression(name, returnType.DefaultValue)); } else { returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); } returnType.CodeType = new CodeTypeReference(typeof(bool[])); return(returnType); } if (Schema.Items.Type[0].Name == "string") { if (Schema.HasDefaultValue()) { var defaultVauleArray = (JArray)Schema.Default; returnType.DefaultValue = new CodeArrayCreateExpression(typeof(string), defaultVauleArray.Select(x => (CodeExpression) new CodePrimitiveExpression((string)x)) .ToArray()); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheArrayOfValueOfAMemberIsNotEqualToAnotherExpression(name, returnType.DefaultValue)); } else { returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); } returnType.CodeType = new CodeTypeReference(typeof(string[])); return(returnType); } if (Schema.Items.Type[0].Name == "object") { if (Schema.HasDefaultValue()) { throw new NotImplementedException("Array of Objects has default value"); } if (Schema.Items.Title != null) { returnType.CodeType = new CodeTypeReference(Helpers.ParseTitle(Schema.Items.Title) + "[]"); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); returnType.Attributes.Clear(); if (Schema.MinItems != null || Schema.MaxItems != null || Schema.Items.MinLength != null || Schema.Items.MaxLength != null) { throw new NotImplementedException(); } return(returnType); } if (Schema.Items.DictionaryValueType != null) { throw new NotImplementedException(); } returnType.CodeType = new CodeTypeReference(typeof(object[])); returnType.AdditionalMembers.Add(Helpers.CreateMethodThatChecksIfTheValueOfAMemberIsNotEqualToAnotherExpression(name, new CodePrimitiveExpression(null))); return(returnType); } throw new NotImplementedException("Array of " + Schema.Items.Type[0].Name); }