sig
  type inline_query = {
    id : string;
    from : TelegramApi.User.user;
    query : string;
    offset : string;
  }
  val create :
    id:string ->
    from:TelegramApi.User.user ->
    query:string ->
    offset:string -> unit -> TelegramApi.InlineQuery.inline_query
  val read : Yojson.Safe.json -> TelegramApi.InlineQuery.inline_query
  type chosen_inline_result = {
    result_id : string;
    from : TelegramApi.User.user;
    query : string;
  }
  val read_chosen_inline_result :
    Yojson.Safe.json -> TelegramApi.InlineQuery.chosen_inline_result
  module Out :
    sig
      type article = {
        id : string;
        title : string;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        url : string option;
        hide_url : bool option;
        description : string option;
        thumb_url : string option;
        thumb_width : int option;
        thumb_height : int option;
      }
      type photo = {
        id : string;
        photo_url : string;
        thumb_url : string;
        photo_width : int option;
        photo_height : int option;
        title : string option;
        description : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type gif = {
        id : string;
        gif_url : string;
        gif_width : int option;
        gif_height : int option;
        thumb_url : string;
        title : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type mpeg4gif = {
        id : string;
        mpeg4_url : string;
        mpeg4_width : int option;
        mpeg4_height : int option;
        thumb_url : string;
        title : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type video = {
        id : string;
        video_url : string;
        mime_type : string;
        thumb_url : string;
        title : string;
        caption : string option;
        video_width : int option;
        video_height : int option;
        video_duration : int option;
        description : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type audio = {
        id : string;
        audio_url : string;
        title : string;
        performer : string option;
        audio_duration : int option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type voice = {
        id : string;
        voice_url : string;
        title : string;
        voice_duration : int option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type document = {
        id : string;
        title : string;
        caption : string option;
        document_url : string;
        mime_type : string;
        description : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
        thumb_url : string option;
        thumb_width : int option;
        thumb_height : int option;
      }
      type location = {
        id : string;
        latitude : float;
        longitude : float;
        title : string;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
        thumb_url : string option;
        thumb_width : int option;
        thumb_height : int option;
      }
      type venue = {
        id : string;
        latitude : float;
        longitude : float;
        title : string;
        address : string;
        foursquare_id : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
        thumb_url : string option;
        thumb_width : int option;
        thumb_height : int option;
      }
      type contact = {
        id : string;
        phone_number : string;
        first_name : string;
        last_name : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
        thumb_url : string option;
        thumb_width : int option;
        thumb_height : int option;
      }
      type cached_photo = {
        id : string;
        photo_file_id : string;
        title : string option;
        description : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_gif = {
        id : string;
        gif_file_id : string;
        title : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_mpeg4gif = {
        id : string;
        mpeg4_file_id : string;
        title : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_sticker = {
        id : string;
        sticker_file_id : string;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_document = {
        id : string;
        title : string;
        document_file_id : string;
        description : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_video = {
        id : string;
        video_file_id : string;
        title : string;
        description : string option;
        caption : string option;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_voice = {
        id : string;
        voice_file_id : string;
        title : string;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type cached_audio = {
        id : string;
        audio_file_id : string;
        reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
        input_message_content :
          TelegramApi.InputMessageContent.input_message_content option;
      }
      type inline_query_result =
          Article of TelegramApi.InlineQuery.Out.article
        | Photo of TelegramApi.InlineQuery.Out.photo
        | Gif of TelegramApi.InlineQuery.Out.gif
        | Mpeg4Gif of TelegramApi.InlineQuery.Out.mpeg4gif
        | Video of TelegramApi.InlineQuery.Out.video
        | Audio of TelegramApi.InlineQuery.Out.audio
        | Voice of TelegramApi.InlineQuery.Out.voice
        | Document of TelegramApi.InlineQuery.Out.document
        | Location of TelegramApi.InlineQuery.Out.location
        | Venue of TelegramApi.InlineQuery.Out.venue
        | Contact of TelegramApi.InlineQuery.Out.contact
        | CachedPhoto of TelegramApi.InlineQuery.Out.cached_photo
        | CachedGif of TelegramApi.InlineQuery.Out.cached_gif
        | CachedMpeg4Gif of TelegramApi.InlineQuery.Out.cached_mpeg4gif
        | CachedSticker of TelegramApi.InlineQuery.Out.cached_sticker
        | CachedDocument of TelegramApi.InlineQuery.Out.cached_document
        | CachedVideo of TelegramApi.InlineQuery.Out.cached_video
        | CachedVoice of TelegramApi.InlineQuery.Out.cached_voice
        | CachedAudio of TelegramApi.InlineQuery.Out.cached_audio
      val create_article :
        id:string ->
        title:string ->
        input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?url:string ->
        ?hide_url:bool ->
        ?description:string ->
        ?thumb_url:string ->
        ?thumb_width:int ->
        ?thumb_height:int ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_photo :
        id:string ->
        photo_url:string ->
        thumb_url:string ->
        ?photo_width:int ->
        ?photo_height:int ->
        ?title:string ->
        ?description:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_gif :
        id:string ->
        gif_url:string ->
        ?gif_width:int ->
        ?gif_height:int ->
        thumb_url:string ->
        ?title:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_mpeg4gif :
        id:string ->
        mpeg4_url:string ->
        ?mpeg4_width:int ->
        ?mpeg4_height:int ->
        thumb_url:string ->
        ?title:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_video :
        id:string ->
        video_url:string ->
        mime_type:string ->
        thumb_url:string ->
        title:string ->
        ?caption:string ->
        ?video_width:int ->
        ?video_height:int ->
        ?video_duration:int ->
        ?description:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_audio :
        id:string ->
        audio_url:string ->
        title:string ->
        ?performer:string ->
        ?audio_duration:int ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_voice :
        id:string ->
        voice_url:string ->
        title:string ->
        ?voice_duration:int ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_document :
        id:string ->
        title:string ->
        ?caption:string ->
        document_url:string ->
        mime_type:string ->
        ?description:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        ?thumb_url:string ->
        ?thumb_width:int ->
        ?thumb_height:int ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_location :
        id:string ->
        latitude:float ->
        longitude:float ->
        title:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        ?thumb_url:string ->
        ?thumb_width:int ->
        ?thumb_height:int ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_venue :
        id:string ->
        latitude:float ->
        longitude:float ->
        title:string ->
        address:string ->
        ?foursquare_id:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        ?thumb_url:string ->
        ?thumb_width:int ->
        ?thumb_height:int ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_contact :
        id:string ->
        phone_number:string ->
        first_name:string ->
        ?last_name:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        ?thumb_url:string ->
        ?thumb_width:int ->
        ?thumb_height:int ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_photo :
        id:string ->
        photo_file_id:string ->
        ?title:string ->
        ?description:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_gif :
        id:string ->
        gif_file_id:string ->
        ?title:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_mpeg4gif :
        id:string ->
        mpeg4_file_id:string ->
        ?title:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_sticker :
        id:string ->
        sticker_file_id:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_document :
        id:string ->
        title:string ->
        document_file_id:string ->
        ?description:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_video :
        id:string ->
        video_file_id:string ->
        title:string ->
        ?description:string ->
        ?caption:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_voice :
        id:string ->
        voice_file_id:string ->
        title:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val create_cached_audio :
        id:string ->
        audio_file_id:string ->
        ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
        ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
        unit -> TelegramApi.InlineQuery.Out.inline_query_result
      val prepare :
        TelegramApi.InlineQuery.Out.inline_query_result -> Yojson.Safe.json
    end
end