type: object
description: the model that contains all the information required to generate a service api
$schema: http://json-schema.org/draft-07/schema#
additionalProperties: false
definitions:
  AADTokenSecurityScheme:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/SecurityScheme'
    properties:
      scopes:
        type: array
        items:
          type: string
    required:
      - scopes
      - type
  APIKeySecurityScheme:
    type: object
    additionalProperties: false
    properties:
      name:
        type: string
      type:
        type: string
        const: apiKey
      description:
        type: string
      in:
        $ref: '#/definitions/ParameterLocation'
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - in
      - name
      - type
  AllSchemaTypes:
    type: string
    description: all schema types
    enum:
      - any
      - any-object
      - arm-id
      - array
      - binary
      - boolean
      - byte-array
      - char
      - choice
      - conditional
      - constant
      - credential
      - date
      - date-time
      - dictionary
      - duration
      - flag
      - group
      - integer
      - not
      - number
      - object
      - odata-query
      - or
      - sealed-choice
      - sealed-conditional
      - string
      - time
      - unixtime
      - uri
      - uuid
      - xor
  AnyObjectSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  AnySchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  ApiVersion:
    type: object
    description: |-
      - since API version formats range from
      Azure ARM API date style (2018-01-01) to semver (1.2.3)
      and virtually any other text, this value tends to be an
      opaque string with the possibility of a modifier to indicate
      that it is a range.

      options:
      - prepend a dash or append a plus to indicate a range
      (ie, '2018-01-01+' or '-2019-01-01', or '1.0+' )

      - semver-range style (ie, '^1.0.0' or '~1.0.0' )
    additionalProperties: false
    properties:
      range:
        type: string
        enum:
          - +
          - '-'
      version:
        type: string
        description: the actual api version string used in the API
    required:
      - version
  ApiVersions:
    type: array
    description: a collection of api versions
    items:
      $ref: '#/definitions/ApiVersion'
  ArmIdSchema:
    type: object
    description: a schema that represents a Uuid value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  ArraySchema:
    type: object
    description: a Schema that represents and array of values
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      elementType:
        description: elementType of the array
        $ref: '#/definitions/Schema'
      maxItems:
        type: number
        description: maximum number of elements in the array
      minItems:
        type: number
        description: minimum number of elements in the array
      nullableItems:
        type: boolean
        description: if elements in the array should be nullable
      uniqueItems:
        type: boolean
        description: if the elements in the array should be unique
    required:
      - elementType
      - language
      - protocol
      - type
  AuthorizationCodeOAuthFlow:
    type: object
    additionalProperties: false
    properties:
      authorizationUrl:
        type: string
        description: an URI
      refreshUrl:
        type: string
        description: an URI
      scopes:
        $ref: '#/definitions/Record<string,string>'
      tokenUrl:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - authorizationUrl
      - scopes
      - tokenUrl
  AzureKeySecurityScheme:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/SecurityScheme'
    properties:
      headerName:
        type: string
    required:
      - headerName
      - type
  BearerHTTPSecurityScheme:
    type: object
    additionalProperties: false
    properties:
      type:
        type: string
        const: http
      description:
        type: string
      bearerFormat:
        type: string
      scheme:
        type: string
        const: bearer
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - scheme
      - type
  BinaryResponse:
    type: object
    description: a response where the content should be treated as a binary instead of a value or object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Response'
    properties:
      binary:
        type: boolean
        description: indicates that this response is a binary stream
        const: true
    required:
      - binary
      - language
      - protocol
  BinarySchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  BooleanSchema:
    type: object
    description: a schema that represents a boolean value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  ByteArraySchema:
    type: object
    description: a schema that represents a ByteArray value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      format:
        type: string
        description: date-time format
        enum:
          - base64url
          - byte
    required:
      - format
      - language
      - protocol
      - type
  CSharpLanguage:
    type: object
    additionalProperties: false
  CharSchema:
    type: object
    description: a schema that represents a Char value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  ChoiceSchema:
    type: object
    description: a schema that represents a choice of several values (ie, an 'enum')
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      choiceType:
        description: the primitive type for the choices
        $ref: '#/definitions/PrimitiveSchema'
      choices:
        type: array
        description: the possible choices for in the set
        items:
          $ref: '#/definitions/ChoiceValue'
    required:
      - choiceType
      - choices
      - language
      - protocol
      - type
  ChoiceValue:
    type: object
    description: an individual choice in a ChoiceSchema
    additionalProperties: false
    properties:
      value:
        type:
          - string
          - number
          - boolean
        description: the actual value
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this value
        $ref: '#/definitions/Languages'
    required:
      - language
      - value
  ClientCredentialsFlow:
    type: object
    additionalProperties: false
    properties:
      refreshUrl:
        type: string
        description: an URI
      scopes:
        $ref: '#/definitions/Record<string,string>'
      tokenUrl:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - scopes
      - tokenUrl
  ComplexSchema:
    type: object
    description: schema types that can be objects
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  CompoundSchemaTypes:
    type: string
    description: |-
      Compound schemas are used to construct complex objects or offer choices of a set of schemas.

      (ie, allOf, anyOf, oneOf )
    enum:
      - or
      - xor
  ConditionalSchema:
    type: object
    description: a schema that represents a value dependent on another
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      conditionalType:
        description: the primitive type for the conditional
        $ref: '#/definitions/PrimitiveSchema'
      conditions:
        type: array
        description: the possible conditinal values
        items:
          $ref: '#/definitions/ConditionalValue'
      sourceValue:
        description: the source value that drives the target value (property or parameter)
        $ref: '#/definitions/Value'
    required:
      - conditionalType
      - conditions
      - language
      - protocol
      - sourceValue
      - type
  ConditionalValue:
    type: object
    description: an individual value in a ConditionalSchema
    additionalProperties: false
    properties:
      source:
        type:
          - string
          - number
          - boolean
        description: the actual value
      target:
        type:
          - string
          - number
          - boolean
        description: the actual value
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this value
        $ref: '#/definitions/Languages'
    required:
      - language
      - source
      - target
  ConstantSchema:
    type: object
    description: a schema that represents a constant value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    properties:
      value:
        description: the actual constant value
        $ref: '#/definitions/ConstantValue'
      valueType:
        description: the schema type of the constant value (ie, StringSchema, NumberSchema, etc)
        $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
      - value
      - valueType
  ConstantType:
    type: object
    additionalProperties: false
    properties:
      type:
        description: the schema type
        $ref: '#/definitions/AllSchemaTypes'
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: '#/definitions/ApiVersion'
      defaultValue:
        description: If the value isn't sent on the wire, the service will assume this
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: '#/definitions/Deprecation'
      example:
        description: example information
      externalDocs:
        description: External Documentation Links
        $ref: '#/definitions/ExternalDocumentation'
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      serialization:
        description: per-serialization information for this Schema
        $ref: '#/definitions/SerializationFormats'
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for Schema
        $ref: '#/definitions/Languages'
      protocol:
        description: per-protocol information for this aspect
        $ref: '#/definitions/Protocols'
    required:
      - language
      - protocol
      - type
  ConstantValue:
    type: object
    description: a container for the actual constant value
    additionalProperties: false
    properties:
      value:
        description: the actual constant value to use
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this value
        $ref: '#/definitions/Languages'
    required:
      - value
  Contact:
    type: object
    description: contact information
    additionalProperties: false
    properties:
      name:
        type: string
      email:
        type: string
      url:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
  CredentialSchema:
    type: object
    description: a schema that represents a Credential value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  DateSchema:
    type: object
    description: a schema that represents a Date value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  DateTimeSchema:
    type: object
    description: a schema that represents a DateTime value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    properties:
      format:
        type: string
        description: date-time format
        enum:
          - date-time
          - date-time-rfc1123
    required:
      - format
      - language
      - protocol
      - type
  Default:
    type: string
    description: A catch-all for all un-handled response codes.
    const: default
  Deprecation:
    type: object
    description: Represent information about a deprecation
    additionalProperties: false
    properties:
      reason:
        type: string
        description: Reason why this was deprecated.
  DictionarySchema:
    type: object
    description: a schema that represents a key-value collection
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ComplexSchema'
    properties:
      elementType:
        description: the element type of the dictionary. (Keys are always strings)
        $ref: '#/definitions/Schema'
      nullableItems:
        type: boolean
        description: if elements in the dictionary should be nullable
    required:
      - elementType
      - language
      - protocol
      - type
  Discriminator:
    type: object
    additionalProperties: false
    properties:
      all:
        $ref: '#/definitions/Record<string,ComplexSchema>'
      immediate:
        $ref: '#/definitions/Record<string,ComplexSchema>'
      property:
        $ref: '#/definitions/Property'
    required:
      - all
      - immediate
      - property
  DurationSchema:
    type: object
    description: a schema that represents a Duration value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  Example:
    type: object
    description: example data [UNFINISHED]
    additionalProperties: false
    properties:
      description:
        type: string
      externalValue:
        type: string
        description: an URI
      summary:
        type: string
  Extensions:
    type: object
    description: A dictionary of open-ended 'x-*' extensions propogated from the original source document.
    additionalProperties: false
    properties:
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
  ExternalDocumentation:
    type: object
    description: a reference to external documentation
    additionalProperties: false
    properties:
      description:
        type: string
      url:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - url
  FlagSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      choices:
        type: array
        description: the possible choices for in the set
        items:
          $ref: '#/definitions/FlagValue'
    required:
      - choices
      - language
      - protocol
      - type
  FlagValue:
    type: object
    additionalProperties: false
    properties:
      value:
        type: number
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this value
        $ref: '#/definitions/Languages'
    required:
      - language
      - value
  GroupProperty:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Property'
    properties:
      originalParameter:
        type: array
        items:
          $ref: '#/definitions/Parameter'
    required:
      - language
      - originalParameter
      - protocol
      - schema
      - serializedName
  GroupSchema:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
      - $ref: '#/definitions/SchemaUsage'
    properties:
      properties:
        type: array
        items:
          $ref: '#/definitions/GroupProperty'
    required:
      - language
      - protocol
      - type
  HTTPSecurityScheme:
    anyOf:
      - $ref: '#/definitions/BearerHTTPSecurityScheme'
      - $ref: '#/definitions/NonBearerHTTPSecurityScheme'
  HttpBinaryRequest:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/HttpWithBodyRequest'
    properties:
      binary:
        type: boolean
        const: true
    required:
      - binary
      - knownMediaType
      - mediaTypes
      - method
      - path
      - uri
  HttpBinaryResponse:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/HttpResponse'
    properties:
      binary:
        type: boolean
        description: binary responses
        const: true
    required:
      - binary
      - statusCodes
  HttpHeader:
    type: object
    additionalProperties: false
    properties:
      schema:
        $ref: '#/definitions/Schema'
      header:
        type: string
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        $ref: '#/definitions/Languages'
    required:
      - header
      - language
      - schema
  HttpMethod:
    type: string
    description: standard HTTP protocol methods
    enum:
      - get
      - put
      - post
      - delete
      - options
      - head
      - patch
      - trace
  HttpModel:
    type: object
    description: code model metadata for HTTP protocol
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Protocol'
    properties:
      security:
        type: array
        description: a collection of security requirements for the service
        items:
          $ref: '#/definitions/SecurityRequirement'
  HttpMultipartRequest:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/HttpWithBodyRequest'
    properties:
      multipart:
        type: boolean
        description: |-
          indicates that the HTTP Request should be a multipart request

          ie, that it has multiple requests in a single request.
        const: true
    required:
      - knownMediaType
      - mediaTypes
      - method
      - multipart
      - path
      - uri
  HttpParameter:
    type: object
    description: extended metadata for HTTP operation parameters
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Protocol'
    properties:
      explode:
        type: boolean
        description: when set, 'form' style parameters generate separate parameters for each value of an array.
      in:
        type: string
        description: the location that this parameter is placed in the http request
        enum:
          - body
          - cookie
          - header
          - none
          - path
          - query
          - uri
          - virtual
      skipUriEncoding:
        type: boolean
        description: when set, this indicates that the content of the parameter should not be subject to URI encoding rules.
      style:
        description: the Serialization Style used for the parameter.
        $ref: '#/definitions/SerializationStyle'
    required:
      - in
  HttpRequest:
    type: object
    description: HTTP operation protocol data
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Protocol'
    properties:
      path:
        type: string
        description: |-
          A relative path to an individual endpoint.

          The field name MUST begin with a slash.
          The path is appended (no relative URL resolution) to the expanded URL from the Server Object's url field in order to construct the full URL.
          Path templating is allowed.

          When matching URLs, concrete (non-templated) paths would be matched before their templated counterparts.
      method:
        description: the HTTP Method used to process this operation
        $ref: '#/definitions/HttpMethod'
      uri:
        type: string
        description: the base URI template for the operation. This will be a template that has Uri parameters to craft the base url to use.
    required:
      - method
      - path
      - uri
  HttpResponse:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Protocol'
    properties:
      headerGroups:
        type: array
        description: sets of HTTP headers grouped together into a single schema
        items:
          $ref: '#/definitions/GroupSchema'
      headers:
        type: array
        description: content returned by the service in the HTTP headers
        items:
          $ref: '#/definitions/HttpHeader'
      knownMediaType:
        description: canonical response type (ie, 'json').
        $ref: '#/definitions/KnownMediaType'
      mediaTypes:
        type: array
        description: The possible media types that this response MUST match one of.
        items:
          type: string
      statusCodes:
        type: array
        description: the possible HTTP status codes that this response MUST match one of.
        items:
          $ref: '#/definitions/StatusCode'
    required:
      - statusCodes
  HttpWithBodyRequest:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/HttpRequest'
    properties:
      knownMediaType:
        description: a normalized value for the media type (ie, distills down to a well-known moniker (ie, 'json'))
        $ref: '#/definitions/KnownMediaType'
      mediaTypes:
        type: array
        description: must contain at least one media type to send for the body
        items:
          type: string
    required:
      - knownMediaType
      - mediaTypes
      - method
      - path
      - uri
  ImplementationLocation:
    type: string
    enum:
      - Method
      - Client
      - Context
  ImplicitOAuthFlow:
    type: object
    additionalProperties: false
    properties:
      authorizationUrl:
        type: string
        description: an URI
      refreshUrl:
        type: string
        description: an URI
      scopes:
        $ref: '#/definitions/Record<string,string>'
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - authorizationUrl
      - scopes
  Info:
    type: object
    description: code model information
    additionalProperties: false
    properties:
      description:
        type: string
        description: a text description of the service
      contact:
        description: contact information for the service
        $ref: '#/definitions/Contact'
      externalDocs:
        description: External Documentation
        $ref: '#/definitions/ExternalDocumentation'
      license:
        description: license information for th service
        $ref: '#/definitions/License'
      termsOfService:
        type: string
        description: an uri to the terms of service specified to access the service
      title:
        type: string
        description: the title of this service.
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - title
  KeySecurityScheme:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/SecurityScheme'
    properties:
      name:
        type: string
      in:
        type: string
        const: header
    required:
      - in
      - name
      - type
  KnownMediaType:
    type: string
    enum:
      - json
      - xml
      - form
      - binary
      - multipart
      - text
      - unknown
  Language:
    type: object
    description: the bare-minimum fields for per-language metadata on a given aspect
    additionalProperties:
      type: object
    properties:
      name:
        type: string
        description: name used in actual implementation
      description:
        type: string
        description: description text - describes this node.
    required:
      - description
      - name
  Languages:
    type: object
    description: custom extensible metadata for individual language generators
    additionalProperties: false
    properties:
      default:
        $ref: '#/definitions/Language'
      c:
        $ref: '#/definitions/Language'
      cpp:
        $ref: '#/definitions/Language'
      csharp:
        $ref: '#/definitions/Language'
      go:
        $ref: '#/definitions/Language'
      java:
        $ref: '#/definitions/Language'
      javascript:
        $ref: '#/definitions/Language'
      objectivec:
        $ref: '#/definitions/Language'
      powershell:
        $ref: '#/definitions/Language'
      python:
        $ref: '#/definitions/Language'
      ruby:
        $ref: '#/definitions/Language'
      sputnik:
        $ref: '#/definitions/Language'
      swift:
        $ref: '#/definitions/Language'
      typescript:
        $ref: '#/definitions/Language'
    required:
      - default
  License:
    type: object
    description: license information
    additionalProperties: false
    properties:
      name:
        type: string
        description: the nameof the license
      url:
        type: string
        description: an uri pointing to the full license text
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - name
  Metadata:
    type: object
    description: common pattern for Metadata on aspects
    additionalProperties: false
    properties:
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this aspect
        $ref: '#/definitions/Languages'
      protocol:
        description: per-protocol information for this aspect
        $ref: '#/definitions/Protocols'
    required:
      - language
      - protocol
  NonBearerHTTPSecurityScheme:
    type: object
    additionalProperties: false
    properties:
      type:
        type: string
        const: http
      description:
        type: string
      scheme:
        type: string
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - scheme
      - type
  NotSchema:
    type: object
    description: a NOT relationship between schemas
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    properties:
      not:
        description: the schema that this may not be.
        $ref: '#/definitions/Schema'
    required:
      - language
      - not
      - protocol
      - type
  NumberSchema:
    type: object
    description: a Schema that represents a Number value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    properties:
      exclusiveMaximum:
        type: boolean
        description: if present, the value must be lower than maximum
      exclusiveMinimum:
        type: boolean
        description: if present, the value must be higher than minimum
      maximum:
        type: number
        description: if present, the value must be lower than or equal to this (unless exclusiveMaximum is true)
      minimum:
        type: number
        description: if present, the value must be highter than or equal to this (unless exclusiveMinimum is true)
      multipleOf:
        type: number
        description: if present, the number must be an exact multiple of this value
      precision:
        type: number
        description: precision (# of bits?) of the number
    required:
      - language
      - precision
      - protocol
      - type
  OAuth2SecurityScheme:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/SecurityScheme'
    properties:
      scopes:
        type: array
        items:
          type: string
    required:
      - scopes
      - type
  OAuthFlows:
    type: object
    additionalProperties: false
    properties:
      authorizationCode:
        $ref: '#/definitions/AuthorizationCodeOAuthFlow'
      clientCredentials:
        $ref: '#/definitions/ClientCredentialsFlow'
      implicit:
        $ref: '#/definitions/ImplicitOAuthFlow'
      password:
        $ref: '#/definitions/PasswordOAuthFlow'
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
  ODataQuerySchema:
    type: object
    description: a schema that represents a ODataQuery value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  ObjectSchema:
    type: object
    description: a schema that represents a type with child properties.
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ComplexSchema'
      - $ref: '#/definitions/SchemaUsage'
    properties:
      children:
        $ref: '#/definitions/Relations'
      discriminator:
        description: the property of the polymorphic descriminator for this type, if there is one
        $ref: '#/definitions/Discriminator'
      discriminatorValue:
        type: string
      maxProperties:
        type: number
        description: maximum number of properties permitted
      minProperties:
        type: number
        description: minimum number of properties permitted
      parents:
        $ref: '#/definitions/Relations'
      properties:
        type: array
        description: the collection of properties that are in this object
        items:
          $ref: '#/definitions/Property'
    required:
      - language
      - protocol
      - type
  ObjectSchemaTypes:
    type: string
    description: schema types that can be objects
    enum:
      - dictionary
      - object
      - or
  OpenIdConnectSecurityScheme:
    type: object
    additionalProperties: false
    properties:
      type:
        type: string
        const: openIdConnect
      description:
        type: string
      openIdConnectUrl:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - openIdConnectUrl
      - type
  Operation:
    type: object
    description: represents a single callable endpoint with a discrete set of inputs, and any number of output possibilities (responses or exceptions)
    additionalProperties: false
    properties:
      operationId:
        type: string
        description: |-
          Original Operation ID if present.
          This can be used to identify the original id of an operation before it is styled.
          THIS IS NOT the name of the operation that should be used in the generator. Use `.language.default.name` for this
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: '#/definitions/ApiVersion'
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: '#/definitions/Deprecation'
      exceptions:
        type: array
        description: responses that indicate a failed call
        items:
          $ref: '#/definitions/Response'
      externalDocs:
        description: External Documentation Links
        $ref: '#/definitions/ExternalDocumentation'
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      parameters:
        type: array
        description: common parameters when there are multiple requests
        items:
          $ref: '#/definitions/Parameter'
      profile:
        description: the apiVersion to use for a given profile name
        $ref: '#/definitions/Record<string,ApiVersion>'
      requestMediaTypes:
        description: Mapping of all the content types available for this operation to the coresponding request.
        $ref: '#/definitions/Record<string,Request>'
      requests:
        type: array
        description: the different possibilities to build the request.
        items:
          $ref: '#/definitions/Request'
      responses:
        type: array
        description: responses that indicate a successful call
        items:
          $ref: '#/definitions/Response'
      signatureParameters:
        type: array
        description: a common filtered list of parameters that is (assumably) the actual method signature parameters
        items:
          $ref: '#/definitions/Parameter'
      specialHeaders:
        type: array
        description: |-
          List of headers that parameters should not handle as parameters but with special logic.
          See https://github.com/Azure/autorest/tree/main/packages/extensions/modelerfour for configuration `skip-special-headers` to exclude headers.
        items:
          type: string
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this aspect
        $ref: '#/definitions/Languages'
      protocol:
        description: per-protocol information for this aspect
        $ref: '#/definitions/Protocols'
    required:
      - language
      - protocol
  OperationGroup:
    type: object
    description: an operation group represents a container around set of operations
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Metadata'
    properties:
      $key:
        type: string
      operations:
        type: array
        items:
          $ref: '#/definitions/Operation'
    required:
      - $key
      - language
      - operations
      - protocol
  OrSchema:
    type: object
    description: an OR relationship between several schemas
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ComplexSchema'
    properties:
      anyOf:
        type: array
        description: the set of schemas that this schema is composed of. Every schema is optional
        items:
          $ref: '#/definitions/ComplexSchema'
    required:
      - anyOf
      - language
      - protocol
      - type
  Parameter:
    type: object
    description: a definition of an discrete input for an operation
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Value'
    properties:
      flattened:
        type: boolean
        description: When a parameter is flattened, it will be left in the list, but marked hidden (so, don't generate those!)
      groupedBy:
        description: When a parameter is grouped into another, this will tell where the parameter got grouped into.
        $ref: '#/definitions/Parameter'
      implementation:
        description: suggested implementation location for this parameter
        $ref: '#/definitions/ImplementationLocation'
      isPartialBody:
        type: boolean
        description: If this parameter is only part of the body request(for multipart and form bodies.)
    required:
      - language
      - protocol
      - schema
  ParameterLocation:
    type: string
    description: the location that this parameter is placed in the http request
    enum:
      - query
      - header
      - cookie
      - path
      - body
      - uri
      - virtual
      - none
  PasswordOAuthFlow:
    type: object
    additionalProperties: false
    properties:
      refreshUrl:
        type: string
        description: an URI
      scopes:
        $ref: '#/definitions/Record<string,string>'
      tokenUrl:
        type: string
        description: an URI
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
    required:
      - scopes
      - tokenUrl
  PathEncodingStyle:
    type: string
    enum:
      - label
      - matrix
      - simple
  PrimitiveSchema:
    type: object
    description: Schema types that are primitive language values
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    required:
      - language
      - protocol
      - type
  PrimitiveSchemaTypes:
    type: string
    description: Schema types that are primitive language values
    enum:
      - arm-id
      - boolean
      - char
      - credential
      - date
      - date-time
      - duration
      - integer
      - number
      - string
      - time
      - unixtime
      - uri
      - uuid
  Property:
    type: object
    description: a property is a child value in an object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Value'
    properties:
      flattenedNames:
        type: array
        description: |-
          when a property is flattened, the property will be the set of serialized names to get to that target property.

          If flattenedName is present, then this property is a flattened property.

          (ie, ['properties','name'] )
        items:
          type: string
      isDiscriminator:
        type: boolean
        description: if this property is used as a discriminator for a polymorphic type
      readOnly:
        type: boolean
        description: if the property is marked read-only (ie, not intended to be sent to the service)
      serializedName:
        type: string
        description: the wire name of this property
    required:
      - language
      - protocol
      - schema
      - serializedName
  Protocol:
    type: object
    description: the bare-minimum fields for per-protocol metadata on a given aspect
    additionalProperties: false
  Protocols:
    type: object
    description: custom extensible metadata for individual protocols (ie, HTTP, etc)
    additionalProperties: false
    properties:
      amqp:
        $ref: '#/definitions/Protocol'
      jsonrpc:
        $ref: '#/definitions/Protocol'
      mqtt:
        $ref: '#/definitions/Protocol'
      http:
        $ref: '#/definitions/Protocol'
  QueryEncodingStyle:
    type: string
    enum:
      - deepObject
      - form
      - pipeDelimited
      - spaceDelimited
  Record<string,ApiVersion>:
    type: object
    additionalProperties: false
  Record<string,ComplexSchema>:
    type: object
    additionalProperties:
      $ref: '#/definitions/ComplexSchema'
  Record<string,Request>:
    type: object
    additionalProperties: false
  Record<string,any>:
    type: object
    additionalProperties:
      type: object
  Record<string,string>:
    type: object
    additionalProperties:
      type: string
  Relations:
    type: object
    additionalProperties: false
    properties:
      all:
        type: array
        items:
          $ref: '#/definitions/ComplexSchema'
      immediate:
        type: array
        items:
          $ref: '#/definitions/ComplexSchema'
    required:
      - all
      - immediate
  Request:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Metadata'
    properties:
      parameters:
        type: array
        description: the parameter inputs to the operation
        items:
          $ref: '#/definitions/Parameter'
      signatureParameters:
        type: array
        description: a filtered list of parameters that is (assumably) the actual method signature parameters
        items:
          $ref: '#/definitions/Parameter'
    required:
      - language
      - protocol
  Response:
    type: object
    description: a response from a service.
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Metadata'
    required:
      - language
      - protocol
  Schema:
    type: object
    additionalProperties: false
    properties:
      type:
        description: the schema type
        $ref: '#/definitions/AllSchemaTypes'
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: '#/definitions/ApiVersion'
      defaultValue:
        description: If the value isn't sent on the wire, the service will assume this
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: '#/definitions/Deprecation'
      example:
        description: example information
      externalDocs:
        description: External Documentation Links
        $ref: '#/definitions/ExternalDocumentation'
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      serialization:
        description: per-serialization information for this Schema
        $ref: '#/definitions/SerializationFormats'
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for Schema
        $ref: '#/definitions/Languages'
      protocol:
        description: per-protocol information for this aspect
        $ref: '#/definitions/Protocols'
    required:
      - language
      - protocol
      - type
  SchemaContext:
    type: string
    enum:
      - input
      - output
      - exception
  SchemaResponse:
    type: object
    description: a response that should be deserialized into a result of type(schema)
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Response'
    properties:
      schema:
        description: the content returned by the service for a given operaiton
        $ref: '#/definitions/Schema'
      nullable:
        type: boolean
        description: indicates whether the response can be 'null'
    required:
      - language
      - protocol
      - schema
  SchemaType:
    type: string
    description: possible schema types that indicate the type of schema.
    enum:
      - array
      - dictionary
      - boolean
      - integer
      - number
      - object
      - string
      - unixtime
      - byte-array
      - binary
      - char
      - date
      - time
      - date-time
      - duration
      - uuid
      - uri
      - arm-id
      - credential
      - odata-query
      - any
      - any-object
      - choice
      - sealed-choice
      - conditional
      - sealed-conditional
      - flag
      - constant
      - or
      - xor
      - not
      - unknown
      - group
  SchemaUsage:
    type: object
    additionalProperties: false
    properties:
      serializationFormats:
        type: array
        description: Known media types in which this schema can be serialized
        items:
          $ref: '#/definitions/KnownMediaType'
      usage:
        type: array
        description: contexts in which the schema is used
        items:
          $ref: '#/definitions/SchemaContext'
  Schemas:
    type: object
    description: the full set of schemas for a given service, categorized into convenient collections
    additionalProperties: false
    properties:
      any:
        type: array
        items:
          $ref: '#/definitions/AnySchema'
      anyObjects:
        type: array
        items:
          $ref: '#/definitions/AnyObjectSchema'
      armIds:
        type: array
        description: an URI of some kind
        items:
          $ref: '#/definitions/ArmIdSchema'
      arrays:
        type: array
        description: a collection of items
        items:
          $ref: '#/definitions/ArraySchema'
      binaries:
        type: array
        items:
          $ref: '#/definitions/BinarySchema'
      booleans:
        type: array
        description: a true or false value
        items:
          $ref: '#/definitions/BooleanSchema'
      byteArrays:
        type: array
        description: ByteArray -- an array of bytes
        items:
          $ref: '#/definitions/ByteArraySchema'
      chars:
        type: array
        description: a single character
        items:
          $ref: '#/definitions/CharSchema'
      choices:
        type: array
        description: |-
          - this is essentially can be thought of as an 'enum'
          that is a choice between one of several items, but an unspecified value is permitted.
        items:
          $ref: '#/definitions/ChoiceSchema'
      conditionals:
        type: array
        description: ie, when 'profile' is 'production', use '2018-01-01' for apiversion
        items:
          $ref: '#/definitions/ConditionalSchema'
      constants:
        type: array
        description: a constant value
        items:
          $ref: '#/definitions/ConstantSchema'
      credentials:
        type: array
        description: a password or credential
        items:
          $ref: '#/definitions/CredentialSchema'
      dateTimes:
        type: array
        description: a DateTime
        items:
          $ref: '#/definitions/DateTimeSchema'
      dates:
        type: array
        description: a Date
        items:
          $ref: '#/definitions/DateSchema'
      dictionaries:
        type: array
        description: an associative array (ie, dictionary, hashtable, etc)
        items:
          $ref: '#/definitions/DictionarySchema'
      durations:
        type: array
        description: a Duration
        items:
          $ref: '#/definitions/DurationSchema'
      flags:
        type: array
        items:
          $ref: '#/definitions/FlagSchema'
      groups:
        type: array
        items:
          $ref: '#/definitions/GroupSchema'
      numbers:
        type: array
        description: a number value
        items:
          $ref: '#/definitions/NumberSchema'
      objects:
        type: array
        description: an object of some type
        items:
          $ref: '#/definitions/ObjectSchema'
      odataQueries:
        type: array
        description: OData Query
        items:
          $ref: '#/definitions/ODataQuerySchema'
      ors:
        type: array
        items:
          $ref: '#/definitions/OrSchema'
      sealedChoices:
        type: array
        description: |-
          - this is essentially can be thought of as an 'enum'
          that is a choice between one of several items, but an unknown value is not allowed.
        items:
          $ref: '#/definitions/SealedChoiceSchema'
      sealedConditionals:
        type: array
        items:
          $ref: '#/definitions/SealedConditionalSchema'
      streams:
        type: array
        items:
          $ref: '#/definitions/Schema'
      strings:
        type: array
        description: a string of characters
        items:
          $ref: '#/definitions/StringSchema'
      times:
        type: array
        description: a time
        items:
          $ref: '#/definitions/TimeSchema'
      unixtimes:
        type: array
        description: UnixTime
        items:
          $ref: '#/definitions/UnixTimeSchema'
      unknowns:
        type: array
        description: |-
          it's possible that we just may make this an error
          in representation.
        items:
          $ref: '#/definitions/Schema'
      uris:
        type: array
        description: an URI of some kind
        items:
          $ref: '#/definitions/UriSchema'
      uuids:
        type: array
        description: a universally unique identifier
        items:
          $ref: '#/definitions/UuidSchema'
      xors:
        type: array
        items:
          $ref: '#/definitions/XorSchema'
  Scheme:
    type: string
    const: bearer
  SealedChoiceSchema:
    type: object
    description: a schema that represents a choice of several values (ie, an 'enum')
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      choiceType:
        description: the primitive type for the choices
        $ref: '#/definitions/PrimitiveSchema'
      choices:
        type: array
        description: the possible choices for in the set
        items:
          $ref: '#/definitions/ChoiceValue'
    required:
      - choiceType
      - choices
      - language
      - protocol
      - type
  SealedConditionalSchema:
    type: object
    description: a schema that represents a value dependent on another (not overridable)
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/ValueSchema'
    properties:
      conditionalType:
        description: the primitive type for the condition
        $ref: '#/definitions/PrimitiveSchema'
      conditions:
        type: array
        description: the possible conditional values
        items:
          $ref: '#/definitions/ConditionalValue'
      sourceValue:
        description: the source value that drives the target value
        $ref: '#/definitions/Value'
    required:
      - conditionalType
      - conditions
      - language
      - protocol
      - sourceValue
      - type
  Security:
    type: object
    description: The security information for the API surface
    additionalProperties: false
    properties:
      authenticationRequired:
        type: boolean
        description: indicates that the API surface requires authentication
      schemes:
        type: array
        items:
          type: SecuritySchemeFull
    required:
      - authenticationRequired
      - schemes
  SecurityRequirement:
    type: object
    description: common ways of serializing simple parameters
    additionalProperties: false
  SecurityScheme:
    type: object
    additionalProperties: false
    properties:
      type:
        type: string
    required:
      - type
  SecurityType:
    type: string
    enum:
      - apiKey
      - http
      - oauth2
      - openIdConnect
  SerializationFormat:
    type: object
    additionalProperties: false
    properties:
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
  SerializationFormats:
    type: object
    description: custom extensible metadata for individual serialization formats
    additionalProperties: false
    properties:
      binary:
        $ref: '#/definitions/SerializationFormat'
      json:
        $ref: '#/definitions/SerializationFormat'
      protobuf:
        $ref: '#/definitions/SerializationFormat'
      xml:
        $ref: '#/definitions/XmlSerlializationFormat'
  SerializationStyle:
    type: string
    description: |-
      The Serialization Style used for the parameter.

      Describes how the parameter value will be serialized depending on the type of the parameter value.
    enum:
      - matrix
      - label
      - simple
      - form
      - spaceDelimited
      - pipeDelimited
      - deepObject
      - json
      - xml
      - binary
      - tabDelimited
  StatusCode:
    enum:
      - 100
      - 101
      - 102
      - 103
      - 200
      - 201
      - 202
      - 203
      - 204
      - 205
      - 206
      - 207
      - 208
      - 226
      - 300
      - 301
      - 302
      - 303
      - 304
      - 305
      - 306
      - 307
      - 308
      - 400
      - 401
      - 402
      - 403
      - 404
      - 405
      - 406
      - 407
      - 408
      - 409
      - 410
      - 411
      - 412
      - 413
      - 414
      - 415
      - 416
      - 417
      - 418
      - 421
      - 422
      - 423
      - 424
      - 425
      - 426
      - 428
      - 429
      - 431
      - 451
      - 500
      - 501
      - 502
      - 503
      - 504
      - 505
      - 506
      - 507
      - 508
      - 510
      - 511
      - default
  StringSchema:
    type: object
    description: a Schema that represents a string value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  TimeSchema:
    type: object
    description: a schema that represents a Date value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  UnixTimeSchema:
    type: object
    description: a schema that represents a UnixTime value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  UriSchema:
    type: object
    description: a schema that represents a Uri value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    properties:
      maxLength:
        type: number
        description: the maximum length of the string
      minLength:
        type: number
        description: the minimum length of the string
      pattern:
        type: string
        description: a regular expression that the string must be validated against
    required:
      - language
      - protocol
      - type
  UuidSchema:
    type: object
    description: a schema that represents a Uuid value
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/PrimitiveSchema'
    required:
      - language
      - protocol
      - type
  Value:
    type: object
    description: common base interface for properties, parameters and the like.
    additionalProperties: false
    properties:
      schema:
        description: the schema of this Value
        $ref: '#/definitions/Schema'
      apiVersions:
        type: array
        description: API versions that this applies to. Undefined means all versions
        items:
          $ref: '#/definitions/ApiVersion'
      assumedValue:
        description: the value that the remote will assume if this value is not present
      clientDefaultValue:
        description: the value that the client should provide if the consumer doesn't provide one
      deprecated:
        description: Represent the deprecation information if api is deprecated.
        default: undefined
        $ref: '#/definitions/Deprecation'
      externalDocs:
        description: External Documentation Links
        $ref: '#/definitions/ExternalDocumentation'
      nullable:
        type: boolean
        description: can null be passed in instead
      origin:
        type: string
        description: where did this aspect come from (jsonpath or 'modelerfour:<soemthing>')
      required:
        type: boolean
        description: if the value is marked 'required'.
      summary:
        type: string
        description: a short description
      extensions:
        description: additional metadata extensions dictionary
        $ref: '#/definitions/Record<string,any>'
      language:
        description: per-language information for this aspect
        $ref: '#/definitions/Languages'
      protocol:
        description: per-protocol information for this aspect
        $ref: '#/definitions/Protocols'
    required:
      - language
      - protocol
      - schema
  ValueOrFactory:
    anyOf:
      - $ref: '#/definitions/ApiVersion'
      - type: object
        additionalProperties: false
  ValueSchema:
    type: object
    description: schema types that are non-object or complex types
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    required:
      - language
      - protocol
      - type
  ValueSchemaTypes:
    type: string
    description: schema types that are non-object or complex types
    enum:
      - arm-id
      - array
      - boolean
      - byte-array
      - char
      - choice
      - conditional
      - credential
      - date
      - date-time
      - duration
      - flag
      - integer
      - number
      - sealed-choice
      - sealed-conditional
      - string
      - time
      - unixtime
      - uri
      - uuid
  VirtualParameter:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Parameter'
    properties:
      originalParameter:
        description: the original body parameter that this parameter is in effect replacing
        $ref: '#/definitions/Parameter'
      pathToProperty:
        type: array
        description: if this parameter is for a nested property, this is the path of properties it takes to get there
        items:
          $ref: '#/definitions/Property'
      targetProperty:
        description: the target property this virtual parameter represents
        $ref: '#/definitions/Property'
    required:
      - language
      - originalParameter
      - pathToProperty
      - protocol
      - schema
      - targetProperty
  XmlSerlializationFormat:
    type: object
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/SerializationFormat'
    properties:
      name:
        type: string
      attribute:
        type: boolean
      namespace:
        type: string
      prefix:
        type: string
      text:
        type: boolean
      wrapped:
        type: boolean
    required:
      - attribute
      - text
      - wrapped
  XorSchema:
    type: object
    description: an XOR relationship between several schemas
    additionalProperties: false
    allOf:
      - $ref: '#/definitions/Schema'
    properties:
      oneOf:
        type: array
        description: the set of schemas that this must be one and only one of.
        items:
          $ref: '#/definitions/Schema'
    required:
      - language
      - oneOf
      - protocol
      - type
  email:
    type: string
  uri:
    type: string
    description: an URI
properties:
  schemas:
    description: All schemas for the model
    $ref: '#/definitions/Schemas'
  globalParameters:
    type: array
    description: all global parameters (ie, ImplementationLocation = client )
    items:
      $ref: '#/definitions/Parameter'
  info:
    description: Code model information
    $ref: '#/definitions/Info'
  operationGroups:
    type: array
    description: All operations
    items:
      $ref: '#/definitions/OperationGroup'
  security:
    $ref: '#/definitions/Security'
  extensions:
    description: additional metadata extensions dictionary
    $ref: '#/definitions/Record<string,any>'
  language:
    description: per-language information for this aspect
    $ref: '#/definitions/Languages'
  protocol:
    description: per-protocol information for this aspect
    $ref: '#/definitions/Protocols'
required:
  - info
  - language
  - operationGroups
  - protocol
  - schemas
  - security
title: CodeModel
