defmodule Jido.Chat.Telegram.InlineKeyboardButton do
@moduledoc """
Typed inline keyboard button payload.
"""
@schema Zoi.struct(
__MODULE__,
%{
text: Zoi.string(),
callback_data: Zoi.string() |> Zoi.nullish(),
url: Zoi.string() |> Zoi.nullish(),
switch_inline_query: Zoi.string() |> Zoi.nullish(),
switch_inline_query_current_chat: Zoi.string() |> Zoi.nullish(),
pay: Zoi.boolean() |> Zoi.nullish()
},
coerce: true
)
@type t :: unquote(Zoi.type_spec(@schema))
@enforce_keys Zoi.Struct.enforce_keys(@schema)
defstruct Zoi.Struct.struct_fields(@schema)
@doc "Returns the Zoi schema for InlineKeyboardButton."
def schema, do: @schema
@doc "Creates a typed inline keyboard button."
@spec new(map()) :: t()
def new(attrs) when is_map(attrs), do: Jido.Chat.Schema.parse!(__MODULE__, @schema, attrs)
@doc "Converts button to Telegram API wire map."
@spec to_wire(t()) :: map()
def to_wire(%__MODULE__{} = button) do
button
|> Map.from_struct()
|> Enum.reject(fn {_k, v} -> is_nil(v) end)
|> Map.new(fn {key, value} -> {Atom.to_string(key), value} end)
end
end