sig
  module Url :
    sig
      type t = { template : string; _type : string; }
      val template :
        (GapiCustomsearchV1Model.Search.Url.t, string) GapiLens.t
      val _type : (GapiCustomsearchV1Model.Search.Url.t, string) GapiLens.t
      val empty : GapiCustomsearchV1Model.Search.Url.t
      val render :
        GapiCustomsearchV1Model.Search.Url.t -> GapiJson.json_data_model list
      val parse :
        GapiCustomsearchV1Model.Search.Url.t ->
        GapiJson.json_data_model -> GapiCustomsearchV1Model.Search.Url.t
    end
  module Spelling :
    sig
      type t = { correctedQuery : string; htmlCorrectedQuery : string; }
      val correctedQuery :
        (GapiCustomsearchV1Model.Search.Spelling.t, string) GapiLens.t
      val htmlCorrectedQuery :
        (GapiCustomsearchV1Model.Search.Spelling.t, string) GapiLens.t
      val empty : GapiCustomsearchV1Model.Search.Spelling.t
      val render :
        GapiCustomsearchV1Model.Search.Spelling.t ->
        GapiJson.json_data_model list
      val parse :
        GapiCustomsearchV1Model.Search.Spelling.t ->
        GapiJson.json_data_model -> GapiCustomsearchV1Model.Search.Spelling.t
    end
  module SearchInformation :
    sig
      type t = {
        formattedSearchTime : string;
        formattedTotalResults : string;
        searchTime : float;
        totalResults : int64;
      }
      val formattedSearchTime :
        (GapiCustomsearchV1Model.Search.SearchInformation.t, string)
        GapiLens.t
      val formattedTotalResults :
        (GapiCustomsearchV1Model.Search.SearchInformation.t, string)
        GapiLens.t
      val searchTime :
        (GapiCustomsearchV1Model.Search.SearchInformation.t, float)
        GapiLens.t
      val totalResults :
        (GapiCustomsearchV1Model.Search.SearchInformation.t, int64)
        GapiLens.t
      val empty : GapiCustomsearchV1Model.Search.SearchInformation.t
      val render :
        GapiCustomsearchV1Model.Search.SearchInformation.t ->
        GapiJson.json_data_model list
      val parse :
        GapiCustomsearchV1Model.Search.SearchInformation.t ->
        GapiJson.json_data_model ->
        GapiCustomsearchV1Model.Search.SearchInformation.t
    end
  type t = {
    context : GapiCustomsearchV1Model.Context.t;
    items : GapiCustomsearchV1Model.Result.t list;
    kind : string;
    promotions : GapiCustomsearchV1Model.Promotion.t list;
    queries : (string * GapiCustomsearchV1Model.Query.t list) list;
    searchInformation : GapiCustomsearchV1Model.Search.SearchInformation.t;
    spelling : GapiCustomsearchV1Model.Search.Spelling.t;
    url : GapiCustomsearchV1Model.Search.Url.t;
  }
  val context :
    (GapiCustomsearchV1Model.Search.t, GapiCustomsearchV1Model.Context.t)
    GapiLens.t
  val items :
    (GapiCustomsearchV1Model.Search.t, GapiCustomsearchV1Model.Result.t list)
    GapiLens.t
  val kind : (GapiCustomsearchV1Model.Search.t, string) GapiLens.t
  val promotions :
    (GapiCustomsearchV1Model.Search.t,
     GapiCustomsearchV1Model.Promotion.t list)
    GapiLens.t
  val queries :
    (GapiCustomsearchV1Model.Search.t,
     (string * GapiCustomsearchV1Model.Query.t list) list)
    GapiLens.t
  val searchInformation :
    (GapiCustomsearchV1Model.Search.t,
     GapiCustomsearchV1Model.Search.SearchInformation.t)
    GapiLens.t
  val spelling :
    (GapiCustomsearchV1Model.Search.t,
     GapiCustomsearchV1Model.Search.Spelling.t)
    GapiLens.t
  val url :
    (GapiCustomsearchV1Model.Search.t, GapiCustomsearchV1Model.Search.Url.t)
    GapiLens.t
  val empty : GapiCustomsearchV1Model.Search.t
  val render :
    GapiCustomsearchV1Model.Search.t -> GapiJson.json_data_model list
  val parse :
    GapiCustomsearchV1Model.Search.t ->
    GapiJson.json_data_model -> GapiCustomsearchV1Model.Search.t
  val to_data_model :
    GapiCustomsearchV1Model.Search.t -> GapiJson.json_data_model
  val of_data_model :
    GapiJson.json_data_model -> GapiCustomsearchV1Model.Search.t
end