sig
  module Image :
    sig
      type t = { height : int; source : string; width : int; }
      val height :
        (GapiCustomsearchV1Model.Promotion.Image.t, int) GapiLens.t
      val source :
        (GapiCustomsearchV1Model.Promotion.Image.t, string) GapiLens.t
      val width : (GapiCustomsearchV1Model.Promotion.Image.t, int) GapiLens.t
      val empty : GapiCustomsearchV1Model.Promotion.Image.t
      val render :
        GapiCustomsearchV1Model.Promotion.Image.t ->
        GapiJson.json_data_model list
      val parse :
        GapiCustomsearchV1Model.Promotion.Image.t ->
        GapiJson.json_data_model -> GapiCustomsearchV1Model.Promotion.Image.t
    end
  module BodyLines :
    sig
      type t = {
        htmlTitle : string;
        link : string;
        title : string;
        url : string;
      }
      val htmlTitle :
        (GapiCustomsearchV1Model.Promotion.BodyLines.t, string) GapiLens.t
      val link :
        (GapiCustomsearchV1Model.Promotion.BodyLines.t, string) GapiLens.t
      val title :
        (GapiCustomsearchV1Model.Promotion.BodyLines.t, string) GapiLens.t
      val url :
        (GapiCustomsearchV1Model.Promotion.BodyLines.t, string) GapiLens.t
      val empty : GapiCustomsearchV1Model.Promotion.BodyLines.t
      val render :
        GapiCustomsearchV1Model.Promotion.BodyLines.t ->
        GapiJson.json_data_model list
      val parse :
        GapiCustomsearchV1Model.Promotion.BodyLines.t ->
        GapiJson.json_data_model ->
        GapiCustomsearchV1Model.Promotion.BodyLines.t
    end
  type t = {
    bodyLines : GapiCustomsearchV1Model.Promotion.BodyLines.t list;
    displayLink : string;
    htmlTitle : string;
    image : GapiCustomsearchV1Model.Promotion.Image.t;
    link : string;
    title : string;
  }
  val bodyLines :
    (GapiCustomsearchV1Model.Promotion.t,
     GapiCustomsearchV1Model.Promotion.BodyLines.t list)
    GapiLens.t
  val displayLink : (GapiCustomsearchV1Model.Promotion.t, string) GapiLens.t
  val htmlTitle : (GapiCustomsearchV1Model.Promotion.t, string) GapiLens.t
  val image :
    (GapiCustomsearchV1Model.Promotion.t,
     GapiCustomsearchV1Model.Promotion.Image.t)
    GapiLens.t
  val link : (GapiCustomsearchV1Model.Promotion.t, string) GapiLens.t
  val title : (GapiCustomsearchV1Model.Promotion.t, string) GapiLens.t
  val empty : GapiCustomsearchV1Model.Promotion.t
  val render :
    GapiCustomsearchV1Model.Promotion.t -> GapiJson.json_data_model list
  val parse :
    GapiCustomsearchV1Model.Promotion.t ->
    GapiJson.json_data_model -> GapiCustomsearchV1Model.Promotion.t
  val to_data_model :
    GapiCustomsearchV1Model.Promotion.t -> GapiJson.json_data_model
  val of_data_model :
    GapiJson.json_data_model -> GapiCustomsearchV1Model.Promotion.t
end