Exemplo n.º 1
0
            public override JSchema GetSchema(JSchemaTypeGenerationContext context)
            {
                // customize the generated schema for these types to have a format
                if (context.ObjectType == typeof(int))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "int32"));
                }
                if (context.ObjectType == typeof(long))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "int64"));
                }
                if (context.ObjectType == typeof(float))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "float"));
                }
                if (context.ObjectType == typeof(double))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "double"));
                }
                if (context.ObjectType == typeof(byte))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "byte"));
                }
                if (context.ObjectType == typeof(DateTime) || context.ObjectType == typeof(DateTimeOffset))
                {
                    return(CreateSchemaWithFormat(context.ObjectType, context.Required, "date-time"));
                }

                // use default schema generation for all other types
                return(null);
            }
Exemplo n.º 2
0
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            var rangeAttribute = context.MemberProperty?.AttributeProvider.GetAttributes(typeof(RangeAttribute), true)
                                 .Cast <RangeAttribute>()
                                 .FirstOrDefault();

            if (rangeAttribute == null)
            {
                return(null);
            }

            if (!(rangeAttribute.Minimum is double minumum) || !(rangeAttribute.Maximum is double maximum))
            {
                return(null);
            }
            var isMinInfinity = double.IsInfinity(minumum);
            var isMaxInfinity = double.IsInfinity(maximum);

            if (!isMinInfinity && !isMaxInfinity)
            {
                return(null);
            }

            var isFloatingPointNumber = context.ObjectType == typeof(float) || context.ObjectType == typeof(double);

            return(new JSchema
            {
                Title = context.SchemaTitle,
                Description = context.SchemaDescription,
                Type = isFloatingPointNumber ? JSchemaType.Number : JSchemaType.Integer,
                Minimum = isMinInfinity ? null : (double?)minumum,
                Maximum = isMaxInfinity ? null : (double?)maximum,
            });
        }
Exemplo n.º 3
0
    public override JSchema GetSchema(JSchemaTypeGenerationContext context)
    {
        var     type   = context.ObjectType;
        JSchema schema = null;

        var generator = new JSchemaGenerator();

        Console.WriteLine(type.Name);

        var isObject = type.Namespace != "System";

        if (isObject)
        {
            if (SkipType == type.Name)
            {
                return(null);
            }

            this.SkipType = type.Name;
            generator.GenerationProviders.Add(this);
        }

        schema = generator.Generate(type);
        return(ModifySchema(schema, context));
    }
            public override JSchema GetSchema(JSchemaTypeGenerationContext context)
            {
                JSchema schema = context.Generator.Generate(context.ObjectType);

                schema.Title = "foo";
                return(schema);
            }
Exemplo n.º 5
0
 public override JSchema GetSchema(JSchemaTypeGenerationContext context)
 {
     if (context.ObjectType == typeof(TaskCollection))
     {
         return(CreateCollectionSchema());
     }
     return(null);
 }
Exemplo n.º 6
0
            public override JSchema GetSchema(JSchemaTypeGenerationContext context)
            {
                var generator = new JSchemaGenerator();
                var schema    = generator.Generate(context.ObjectType);

                schema.Properties["Path"].Pattern = @"(\b\.)+";

                return(schema);
            }
Exemplo n.º 7
0
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            if (context.ObjectType == typeof(Guid))
            {
                return(CreateSchemaWithFormat(context.ObjectType, context.Required, "guid"));
            }

            return(null);
        }
 protected override JSchema Customize(JSchemaTypeGenerationContext context, JsonObjectContract contract, Type type, JSchema schema)
 {
     foreach (var property in contract.Properties.Where(p => p.PropertyType == typeof(Uri) && p.AttributeProvider.GetAttributes(typeof(UriReferenceAttribute), true).Any()))
     {
         JSchema propertySchema;
         if (!schema.Properties.TryGetValue(property.PropertyName, out propertySchema))
         {
             continue;
         }
         propertySchema.Format = UriReference;
     }
     return(schema);
 }
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            var definedType = context.ParentContract.CreatedType;
            var schema      = JsonSchemaUtility.GetSchema(context.ObjectType);

            var propertyInfo = definedType.GetProperty(this.propertyName);
            var items        = propertyInfo.GetValue(null) as string[];

            if (items != null)
            {
                schema.Enum.Clear();
                foreach (var item in items)
                {
                    schema.Enum.Add(JValue.CreateString(item));
                }
            }


            //int qwr = 0;

            //bool isNullable = ReflectionUtils.IsNullableType(context.ObjectType);
            //Type t = context.ObjectType;

            //var schema = new JSchema
            //{
            //    Title = context.SchemaTitle,
            //    Description = context.SchemaDescription,
            //    Type = JSchemaType.String
            //};

            //context.g

            //if (isNullable && context.Required != Required.Always && context.Required != Required.DisallowNull)
            //{
            //    schema.Type |= JSchemaType.Null;
            //    schema.Enum.Add(JValue.CreateNull());
            //}

            //string[] names = Enum.GetNames(t);

            //foreach (string name in names)
            //{
            //    string finalName = EnumUtils.ToEnumName(t, name, CamelCaseText);

            //    schema.Enum.Add(JValue.CreateString(finalName));
            //}

            return(schema);
        }
    public override JSchema GetSchema(JSchemaTypeGenerationContext context)
    {
        var contract = GetContract(context);
        var type     = GetType(contract);

        PushType(type);
        try
        {
            return(Customize(context, contract, type, context.Generator.Generate(context.ObjectType)));
        }
        finally
        {
            PopType(type);
        }
    }
    public sealed override bool CanGenerateSchema(JSchemaTypeGenerationContext context)
    {
        var contract = GetContract(context);
        var type     = GetType(contract);

        if (CurrentlyGeneratingForType(type))
        {
            return(false);
        }
        if (!CanCustomize(context, contract, type))
        {
            return(false);
        }
        return(true);
    }
Exemplo n.º 12
0
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            var definedType  = context.ParentContract.CreatedType;
            var schema       = JsonSchemaUtility.GetSchema(context.ObjectType);
            var propertyInfo = definedType.GetProperty(this.propertyName);

            if (propertyInfo.GetValue(null) is string[] items)
            {
                schema.Enum.Clear();
                foreach (var item in items)
                {
                    schema.Enum.Add(JValue.CreateString(item));
                }
            }
            return(schema);
        }
Exemplo n.º 13
0
    public sealed override bool CanGenerateSchema(JSchemaTypeGenerationContext context)
    {
        JsonContract contract;
        Type         type;

        if (!TryGetType(context, out contract, out type))
        {
            return(false);
        }
        if (CurrentlyGeneratingForType(type))
        {
            return(false);
        }
        if (!CanCustomize(context, contract, type))
        {
            return(false);
        }
        return(true);
    }
Exemplo n.º 14
0
    public override JSchema GetSchema(JSchemaTypeGenerationContext context)
    {
        JsonContract contract;
        Type         type;

        if (!TryGetType(context, out contract, out type))
        {
            throw new JSchemaException(string.Format("Unexpected type {0}", context.ObjectType));
        }
        PushType(type);
        try
        {
            return(Customize(context, contract, type, context.Generator.Generate(context.ObjectType)));
        }
        finally
        {
            PopType(type);
        }
    }
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            var generator = new JSchemaGenerator();
            var schema    = generator.Generate(context.ObjectType, context.Required != Required.Always);


            schema.SchemaVersion = new Uri("http://json-schema.org/draft-04/schema#");
            foreach (var schemaProperty in schema.Properties)
            {
                var key  = schemaProperty.Key;
                var item = schemaProperty.Value;
                if (item?.Type == null)
                {
                    continue;
                }

                if (item.Type.Value.HasFlag(JSchemaType.Object))
                {
                    foreach (var valueProperty in item.Properties)
                    {
                        AddFormat(valueProperty, key);
                    }
                }
                else if (item.Type.Value.HasFlag(JSchemaType.Boolean) ||
                         item.Type.Value.HasFlag(JSchemaType.Integer) ||
                         item.Type.Value.HasFlag(JSchemaType.Number) ||
                         item.Type.Value.HasFlag(JSchemaType.Array) ||
                         item.Type.Value.HasFlag(JSchemaType.String)
                         )
                {
                    AddFormat(schemaProperty, context.ObjectType.Name);
                }
            }

            return(schema);
        }
        public override JSchema GetSchema(JSchemaTypeGenerationContext context)
        {
            // Handle Schema Definition Attribute
            if (context.ObjectType.CustomAttributes.Any(a => a.AttributeType == typeof(ConiziSchemaAttribute)))
            {
                var generator = context.Generator;
                var schema    = generator.Generate(context.ObjectType);
                HandleAdditionalProperties(context.ObjectType, schema);
                HandleXProperties(context.ObjectType, schema);
                var attr = context.ObjectType.GetCustomAttribute <ConiziSchemaAttribute>();
                schema.Id            = new Uri(attr.Id);
                schema.SchemaVersion = new Uri("http://json-schema.org/draft-06/schema#");
                var assembly = this.GetType().Assembly.GetName();
                schema.Description = $"{context.SchemaDescription}";
                return(schema);
            }

            var processedProps = new List <string>();

            //Check if anyOf etc. is used
            //if (context.ObjectType.CustomAttributes.Any(a => a.AttributeType == typeof(KnownTypeAttribute)))
            //{
            //    var generator = context.Generator;
            //    var schema = generator.Generate(context.ObjectType);

            //    foreach (var attr in context.ObjectType.GetCustomAttributes().Where(a => a is KnownTypeAttribute)
            //        .Cast<KnownTypeAttribute>())
            //    {
            //        var schemaOf = generator.Generate(attr.Type);
            //        HandleAdditionalProperties(attr.Type, schemaOf);
            //        HandleXProperties(attr.Type, schemaOf);
            //        schemaOf.Title = context.SchemaTitle;
            //        schemaOf.Description = context.SchemaDescription;

            //        foreach (var custAttr in context.ObjectType.GetCustomAttributes())
            //        {
            //            switch (custAttr)
            //            {
            //                case ConiziOneOfAttribute oneOf:
            //                    schema.OneOf.Add(schemaOf);
            //                    processedProps.Add(attr.Type.Name);
            //                    break;

            //                case ConiziAnyOfAttribute oneOf:
            //                    schema.AnyOf.Add(schemaOf);
            //                    processedProps.Add(attr.Type.Name);
            //                    break;

            //                case ConiziAllOfAttribute allOf:
            //                    schema.AllOf.Add(schemaOf);
            //                    processedProps.Add(attr.Type.Name);
            //                    break;
            //            }
            //        }
            //    }

            //    foreach (var prop in context.ObjectType.GetProperties())
            //    {
            //        if (!processedProps.Contains(prop.PropertyType.Name))
            //            continue;

            //        var ccProp = prop.Name.ToCamelCase();

            //        schema.Properties.Remove(ccProp);
            //    }

            //    return schema;
            //}

            if (context.ObjectType == typeof(DateTime))
            {
                if (context.MemberProperty.AttributeProvider.GetAttributes(typeof(ConiziDateOnlyAttribute), true).Any())
                {
                    var generator = context.Generator;
                    var schema    = generator.Generate(context.ObjectType);
                    schema.Format      = "date";
                    schema.Title       = context.SchemaTitle;
                    schema.Description = context.SchemaDescription;
                    return(schema);
                }
            }

            //if (context.MemberProperty?.AttributeProvider != null &&  context.MemberProperty.AttributeProvider.GetAttributes(typeof(ConiziHandleExternal), true).Any())
            //{
            //    var attr = context.MemberProperty.AttributeProvider.GetAttributes(typeof(ConiziHandleExternal), true).Cast<ConiziHandleExternal>()
            //        .FirstOrDefault();

            //    if (attr != null && !string.IsNullOrEmpty(attr.externalRef))
            //    {
            //        var generator = context.Generator;
            //        var schema = generator.Generate(context.ObjectType);
            //        schema.AllowAdditionalProperties = false;
            //        schema.Type = JSchemaType.Array;
            //        schema.Reference = new Uri(attr.externalRef);
            //        return schema;
            //    }
            //}

            if (context.ObjectType == typeof(string) && context.MemberProperty?.AttributeProvider != null)
            {
                if (context.MemberProperty.AttributeProvider.GetAttributes(typeof(ConiziTimeOnlyAttribute), true).Any())
                {
                    var generator = context.Generator;
                    var schema    = generator.Generate(context.ObjectType);
                    schema.Format      = "time";
                    schema.Title       = context.SchemaTitle;
                    schema.Description = context.SchemaDescription;
                    return(schema);
                }
            }

            var defaultGenerator = context.Generator;
            var defaultSchema    = defaultGenerator.Generate(context.ObjectType);

            HandleAdditionalProperties(context.ObjectType, defaultSchema);
            HandleXProperties(context.ObjectType, defaultSchema);
            defaultSchema.Title       = context.SchemaTitle;
            defaultSchema.Description = context.SchemaDescription;
            return(defaultSchema);
        }
Exemplo n.º 17
0
 protected override bool CanCustomize(JSchemaTypeGenerationContext context, JsonContract contract, Type type)
 {
     return(contract is JsonObjectContract);
 }
        private JSchema GenerateInternal(Type type, Required valueRequired, JsonProperty memberProperty, JsonContainerContract container)
        {
            ValidationUtils.ArgumentNotNull(type, "type");

            Type nonNullableType = ReflectionUtils.IsNullableType(type) ? Nullable.GetUnderlyingType(type) : type;

            Uri resolvedId = GetTypeId(nonNullableType, false);
            Uri explicitId = GetTypeId(nonNullableType, true);

            if (resolvedId != null)
            {
                JSchema resolvedSchema = _resolver.GetSchema(resolvedId);
                if (resolvedSchema != null)
                {
                    // resolved schema is not null but referencing member allows nulls
                    // change resolved schema to allow nulls. hacky but what are ya gonna do?
                    if (valueRequired != Required.Always && !HasFlag(resolvedSchema.Type, JSchemaType.Null))
                    {
                        resolvedSchema.Type |= JSchemaType.Null;
                    }

                    return(resolvedSchema);
                }
            }

            JsonContract contract = ContractResolver.ResolveContract(type);

            var key = CreateKey(valueRequired, memberProperty, contract);

            switch (contract.ContractType)
            {
            case JsonContractType.Object:
            case JsonContractType.Array:
            case JsonContractType.Dictionary:
                TypeSchema typeSchema = _typeSchemas.SingleOrDefault(s => s.Key.Equals(key));
                if (typeSchema != null)
                {
                    return(typeSchema.Schema);
                }
                break;
            }

            JSchema schema = null;

            JSchemaGenerationProvider provider = ResolveTypeProvider(nonNullableType, memberProperty);

            if (provider != null)
            {
                JSchemaTypeGenerationContext context = new JSchemaTypeGenerationContext(type, valueRequired, memberProperty, container, this);

                schema = provider.GetSchema(context);

                if (schema == null)
                {
                    throw new JsonException("Could not get schema for type '{0}' from provider '{1}'.".FormatWith(CultureInfo.InvariantCulture, type.FullName, provider.GetType().FullName));
                }
            }

            if (_generationProviders != null)
            {
                JSchemaTypeGenerationContext context = new JSchemaTypeGenerationContext(type, valueRequired, memberProperty, container, this);

                foreach (JSchemaGenerationProvider generationProvider in _generationProviders)
                {
                    schema = generationProvider.GetSchema(context);
                }
            }

            if (schema != null)
            {
                _typeSchemas.Add(new TypeSchema(key, schema));
                return(schema);
            }

            schema = new JSchema();
            if (explicitId != null)
            {
                schema.Id = explicitId;
            }

            switch (contract.ContractType)
            {
            case JsonContractType.Object:
            case JsonContractType.Array:
            case JsonContractType.Dictionary:
                _typeSchemas.Add(new TypeSchema(key, schema));
                break;
            }

            return(PopulateSchema(schema, contract, memberProperty, valueRequired));
        }
Exemplo n.º 19
0
 public override bool CanGenerateSchema(JSchemaTypeGenerationContext context)
 {
     return(base.CanGenerateSchema(context) &&
            context.ObjectType == typeof(ProvidersWidgetConfig));
 }
Exemplo n.º 20
0
 static bool TryGetType(JSchemaTypeGenerationContext context, out JsonContract contract, out Type type)
 {
     contract = context.Generator.ContractResolver.ResolveContract(context.ObjectType);
     type     = contract == null ? null : Nullable.GetUnderlyingType(contract.UnderlyingType) ?? contract.UnderlyingType;
     return(contract != null && type != null);
 }
Exemplo n.º 21
0
 public abstract JSchema ModifySchema(JSchema schema, JSchemaTypeGenerationContext context);
 protected abstract JSchema Customize(JSchemaTypeGenerationContext context, JsonContract contract, Type type, JSchema schema);
 protected virtual bool CanCustomize(JSchemaTypeGenerationContext context, JsonContract contract, Type type)
 {
     return(true);
 }
 public override JSchema GetSchema(JSchemaTypeGenerationContext context)
 {
     throw new NotImplementedException();
 }
 static JsonContract GetContract(JSchemaTypeGenerationContext context)
 {
     return(context.Generator.ContractResolver.ResolveContract(context.ObjectType));
 }
Exemplo n.º 26
0
 public override JSchema ModifySchema(JSchema schema, JSchemaTypeGenerationContext context)
 {
     schema.Title = "My Title";
     return(schema);
 }