lib/alexia/model/input_message_content.ex

defmodule Alexia.Model.InputMessageContent do
  @type t ::
          Alexia.Model.InputMessageContent.Text.t()
          | Alexia.Model.InputMessageContent.Location.t()
          | Alexia.Model.InputMessageContent.Venue.t()
          | Alexia.Model.InputMessageContent.Contact.t()

  defmodule Text do
    @derive Jason.Encoder
    defstruct message_text: nil, parse_mode: nil, disable_web_page_preview: false
    @type t :: %Text{message_text: binary, parse_mode: binary, disable_web_page_preview: atom}
  end

  defmodule Location do
    @derive Jason.Encoder
    defstruct latitude: nil, longitude: nil
    @type t :: %Location{latitude: float, longitude: float}
  end

  defmodule Venue do
    @derive Jason.Encoder
    defstruct latitude: nil, longitude: nil, title: nil, address: nil, foursquare_id: nil

    @type t :: %Venue{
            latitude: float,
            longitude: float,
            title: binary,
            address: binary,
            foursquare_id: binary
          }
  end

  defmodule Contact do
    @derive Jason.Encoder
    defstruct phone_number: nil, first_name: nil, last_name: nil
    @type t :: %Contact{phone_number: binary, first_name: binary, last_name: binary}
  end
end