sig
  module Variant :
    sig
      module Map :
        sig
          type t = { _ref : string; type_value : string; }
          val _ref :
            (GapiDiscoveryV1Model.JsonSchema.Variant.Map.t, string)
            GapiLens.t
          val type_value :
            (GapiDiscoveryV1Model.JsonSchema.Variant.Map.t, string)
            GapiLens.t
          val empty : GapiDiscoveryV1Model.JsonSchema.Variant.Map.t
          val render :
            GapiDiscoveryV1Model.JsonSchema.Variant.Map.t ->
            GapiJson.json_data_model list
          val parse :
            GapiDiscoveryV1Model.JsonSchema.Variant.Map.t ->
            GapiJson.json_data_model ->
            GapiDiscoveryV1Model.JsonSchema.Variant.Map.t
        end
      type t = {
        discriminant : string;
        map : GapiDiscoveryV1Model.JsonSchema.Variant.Map.t list;
      }
      val discriminant :
        (GapiDiscoveryV1Model.JsonSchema.Variant.t, string) GapiLens.t
      val map :
        (GapiDiscoveryV1Model.JsonSchema.Variant.t,
         GapiDiscoveryV1Model.JsonSchema.Variant.Map.t list)
        GapiLens.t
      val empty : GapiDiscoveryV1Model.JsonSchema.Variant.t
      val render :
        GapiDiscoveryV1Model.JsonSchema.Variant.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.JsonSchema.Variant.t ->
        GapiJson.json_data_model -> GapiDiscoveryV1Model.JsonSchema.Variant.t
    end
  module Annotations :
    sig
      type t = { required : string list; }
      val required :
        (GapiDiscoveryV1Model.JsonSchema.Annotations.t, string list)
        GapiLens.t
      val empty : GapiDiscoveryV1Model.JsonSchema.Annotations.t
      val render :
        GapiDiscoveryV1Model.JsonSchema.Annotations.t ->
        GapiJson.json_data_model list
      val parse :
        GapiDiscoveryV1Model.JsonSchema.Annotations.t ->
        GapiJson.json_data_model ->
        GapiDiscoveryV1Model.JsonSchema.Annotations.t
    end
  type t = {
    _ref : string;
    additionalProperties : GapiDiscoveryV1Model.JsonSchema.t option;
    annotations : GapiDiscoveryV1Model.JsonSchema.Annotations.t;
    default : string;
    description : string;
    enum : string list;
    enumDescriptions : string list;
    format : string;
    id : string;
    items : GapiDiscoveryV1Model.JsonSchema.t option;
    location : string;
    maximum : string;
    minimum : string;
    pattern : string;
    properties : (string * GapiDiscoveryV1Model.JsonSchema.t) list;
    readOnly : bool;
    repeated : bool;
    required : bool;
    _type : string;
    variant : GapiDiscoveryV1Model.JsonSchema.Variant.t;
  }
  val _ref : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val additionalProperties :
    (GapiDiscoveryV1Model.JsonSchema.t,
     GapiDiscoveryV1Model.JsonSchema.t option)
    GapiLens.t
  val annotations :
    (GapiDiscoveryV1Model.JsonSchema.t,
     GapiDiscoveryV1Model.JsonSchema.Annotations.t)
    GapiLens.t
  val default : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val description : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val enum : (GapiDiscoveryV1Model.JsonSchema.t, string list) GapiLens.t
  val enumDescriptions :
    (GapiDiscoveryV1Model.JsonSchema.t, string list) GapiLens.t
  val format : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val id : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val items :
    (GapiDiscoveryV1Model.JsonSchema.t,
     GapiDiscoveryV1Model.JsonSchema.t option)
    GapiLens.t
  val location : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val maximum : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val minimum : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val pattern : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val properties :
    (GapiDiscoveryV1Model.JsonSchema.t,
     (string * GapiDiscoveryV1Model.JsonSchema.t) list)
    GapiLens.t
  val readOnly : (GapiDiscoveryV1Model.JsonSchema.t, bool) GapiLens.t
  val repeated : (GapiDiscoveryV1Model.JsonSchema.t, bool) GapiLens.t
  val required : (GapiDiscoveryV1Model.JsonSchema.t, bool) GapiLens.t
  val _type : (GapiDiscoveryV1Model.JsonSchema.t, string) GapiLens.t
  val variant :
    (GapiDiscoveryV1Model.JsonSchema.t,
     GapiDiscoveryV1Model.JsonSchema.Variant.t)
    GapiLens.t
  val empty : GapiDiscoveryV1Model.JsonSchema.t
  val render :
    GapiDiscoveryV1Model.JsonSchema.t -> GapiJson.json_data_model list
  val parse :
    GapiDiscoveryV1Model.JsonSchema.t ->
    GapiJson.json_data_model -> GapiDiscoveryV1Model.JsonSchema.t
  val to_data_model :
    GapiDiscoveryV1Model.JsonSchema.t -> GapiJson.json_data_model
  val of_data_model :
    GapiJson.json_data_model -> GapiDiscoveryV1Model.JsonSchema.t
end