// <auto-generated>
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is
// regenerated.
// </auto-generated>

namespace k8s.Models
{
    using Newtonsoft.Json;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// JSONSchemaProps is a JSON-Schema following Specification Draft 4
    /// (http://json-schema.org/).
    /// </summary>
    public partial class V1beta1JSONSchemaProps
    {
        /// <summary>
        /// Initializes a new instance of the V1beta1JSONSchemaProps class.
        /// </summary>
        public V1beta1JSONSchemaProps()
        {
            CustomInit();
        }

        /// <summary>
        /// Initializes a new instance of the V1beta1JSONSchemaProps class.
        /// </summary>
        /// <param name="additionalItems">JSONSchemaPropsOrBool represents
        /// JSONSchemaProps or a boolean value. Defaults to true for the
        /// boolean property.</param>
        /// <param name="additionalProperties">JSONSchemaPropsOrBool represents
        /// JSONSchemaProps or a boolean value. Defaults to true for the
        /// boolean property.</param>
        /// <param name="defaultProperty">JSON represents any valid JSON value.
        /// These types are supported: bool, int64, float64, string,
        /// []interface{}, map[string]interface{} and nil.</param>
        /// <param name="example">JSON represents any valid JSON value. These
        /// types are supported: bool, int64, float64, string, []interface{},
        /// map[string]interface{} and nil.</param>
        /// <param name="items">JSONSchemaPropsOrArray represents a value that
        /// can either be a JSONSchemaProps or an array of JSONSchemaProps.
        /// Mainly here for serialization purposes.</param>
        public V1beta1JSONSchemaProps(string refProperty = default(string), string schema = default(string), object additionalItems = default(object), object additionalProperties = default(object), IList<V1beta1JSONSchemaProps> allOf = default(IList<V1beta1JSONSchemaProps>), IList<V1beta1JSONSchemaProps> anyOf = default(IList<V1beta1JSONSchemaProps>), object defaultProperty = default(object), IDictionary<string, V1beta1JSONSchemaProps> definitions = default(IDictionary<string, V1beta1JSONSchemaProps>), IDictionary<string, object> dependencies = default(IDictionary<string, object>), string description = default(string), IList<object> enumProperty = default(IList<object>), object example = default(object), bool? exclusiveMaximum = default(bool?), bool? exclusiveMinimum = default(bool?), V1beta1ExternalDocumentation externalDocs = default(V1beta1ExternalDocumentation), string format = default(string), string id = default(string), object items = default(object), long? maxItems = default(long?), long? maxLength = default(long?), long? maxProperties = default(long?), double? maximum = default(double?), long? minItems = default(long?), long? minLength = default(long?), long? minProperties = default(long?), double? minimum = default(double?), double? multipleOf = default(double?), V1beta1JSONSchemaProps not = default(V1beta1JSONSchemaProps), IList<V1beta1JSONSchemaProps> oneOf = default(IList<V1beta1JSONSchemaProps>), string pattern = default(string), IDictionary<string, V1beta1JSONSchemaProps> patternProperties = default(IDictionary<string, V1beta1JSONSchemaProps>), IDictionary<string, V1beta1JSONSchemaProps> properties = default(IDictionary<string, V1beta1JSONSchemaProps>), IList<string> required = default(IList<string>), string title = default(string), string type = default(string), bool? uniqueItems = default(bool?))
        {
            RefProperty = refProperty;
            Schema = schema;
            AdditionalItems = additionalItems;
            AdditionalProperties = additionalProperties;
            AllOf = allOf;
            AnyOf = anyOf;
            DefaultProperty = defaultProperty;
            Definitions = definitions;
            Dependencies = dependencies;
            Description = description;
            EnumProperty = enumProperty;
            Example = example;
            ExclusiveMaximum = exclusiveMaximum;
            ExclusiveMinimum = exclusiveMinimum;
            ExternalDocs = externalDocs;
            Format = format;
            Id = id;
            Items = items;
            MaxItems = maxItems;
            MaxLength = maxLength;
            MaxProperties = maxProperties;
            Maximum = maximum;
            MinItems = minItems;
            MinLength = minLength;
            MinProperties = minProperties;
            Minimum = minimum;
            MultipleOf = multipleOf;
            Not = not;
            OneOf = oneOf;
            Pattern = pattern;
            PatternProperties = patternProperties;
            Properties = properties;
            Required = required;
            Title = title;
            Type = type;
            UniqueItems = uniqueItems;
            CustomInit();
        }

        /// <summary>
        /// An initialization method that performs custom operations like setting defaults
        /// </summary>
        partial void CustomInit();

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "$ref")]
        public string RefProperty { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "$schema")]
        public string Schema { get; set; }

        /// <summary>
        /// Gets or sets jSONSchemaPropsOrBool represents JSONSchemaProps or a
        /// boolean value. Defaults to true for the boolean property.
        /// </summary>
        [JsonProperty(PropertyName = "additionalItems")]
        public object AdditionalItems { get; set; }

        /// <summary>
        /// Gets or sets jSONSchemaPropsOrBool represents JSONSchemaProps or a
        /// boolean value. Defaults to true for the boolean property.
        /// </summary>
        [JsonProperty(PropertyName = "additionalProperties")]
        public object AdditionalProperties { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "allOf")]
        public IList<V1beta1JSONSchemaProps> AllOf { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "anyOf")]
        public IList<V1beta1JSONSchemaProps> AnyOf { get; set; }

        /// <summary>
        /// Gets or sets JSON represents any valid JSON value. These types are
        /// supported: bool, int64, float64, string, []interface{},
        /// map[string]interface{} and nil.
        /// </summary>
        [JsonProperty(PropertyName = "default")]
        public object DefaultProperty { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "definitions")]
        public IDictionary<string, V1beta1JSONSchemaProps> Definitions { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "dependencies")]
        public IDictionary<string, object> Dependencies { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "description")]
        public string Description { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "enum")]
        public IList<object> EnumProperty { get; set; }

        /// <summary>
        /// Gets or sets JSON represents any valid JSON value. These types are
        /// supported: bool, int64, float64, string, []interface{},
        /// map[string]interface{} and nil.
        /// </summary>
        [JsonProperty(PropertyName = "example")]
        public object Example { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "exclusiveMaximum")]
        public bool? ExclusiveMaximum { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "exclusiveMinimum")]
        public bool? ExclusiveMinimum { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "externalDocs")]
        public V1beta1ExternalDocumentation ExternalDocs { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "format")]
        public string Format { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "id")]
        public string Id { get; set; }

        /// <summary>
        /// Gets or sets jSONSchemaPropsOrArray represents a value that can
        /// either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly
        /// here for serialization purposes.
        /// </summary>
        [JsonProperty(PropertyName = "items")]
        public object Items { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "maxItems")]
        public long? MaxItems { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "maxLength")]
        public long? MaxLength { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "maxProperties")]
        public long? MaxProperties { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "maximum")]
        public double? Maximum { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "minItems")]
        public long? MinItems { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "minLength")]
        public long? MinLength { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "minProperties")]
        public long? MinProperties { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "minimum")]
        public double? Minimum { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "multipleOf")]
        public double? MultipleOf { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "not")]
        public V1beta1JSONSchemaProps Not { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "oneOf")]
        public IList<V1beta1JSONSchemaProps> OneOf { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "pattern")]
        public string Pattern { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "patternProperties")]
        public IDictionary<string, V1beta1JSONSchemaProps> PatternProperties { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "properties")]
        public IDictionary<string, V1beta1JSONSchemaProps> Properties { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "required")]
        public IList<string> Required { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "title")]
        public string Title { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "type")]
        public string Type { get; set; }

        /// <summary>
        /// </summary>
        [JsonProperty(PropertyName = "uniqueItems")]
        public bool? UniqueItems { get; set; }

    }
}
