Beispiel #1
0
        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();
        }
Beispiel #3
0
        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);
        }