Packages
telegex
1.3.1
1.9.0-rc.0
1.8.0
1.7.0
1.6.0
1.5.0
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.3-dev
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.10
1.0.0-rc.9
1.0.0-rc.8
1.0.0-rc.7
1.0.0-rc.6
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.1.0-rc.11
0.1.0-rc.10
0.1.0-rc.9
0.1.0-rc.8
0.1.0-rc.7
0.1.0-rc.6
0.1.0-rc.5
0.1.0-rc.4
0.1.0-rc.3
0.1.0-rc.2
0.1.0-rc.1
0.0.4
0.0.3
0.0.2
0.0.1
A Telegram bot framework, with its client-side based on data and code generation, boasts unparalleled adaptation speed and correctness for new versions.
Current section
Files
Jump to
Current section
Files
lib/telegex/caller/adapter.ex
defmodule Telegex.Caller.Adapter do
@moduledoc "An adapter to help HTTP clients implement callers."
alias Telegex.{Response, Global}
defmacro __using__(_opts) do
quote do
@behaviour Telegex.Caller
alias Telegex.{Error, RequestError}
import unquote(__MODULE__)
@json_header {"content-type", "application/json"}
@type error :: Telegex.Type.error()
end
end
@spec impl() :: module
def impl, do: Module.concat(__MODULE__, adapter_name())
@spec build_url(String.t()) :: String.t()
def build_url(method) do
"#{Global.api_base_url()}#{Telegex.Instance.token()}/#{method}"
end
@spec options :: keyword
def options do
case Global.caller_adapter() do
{_adapter, options} -> options
_ -> []
end
end
@spec adapter_name :: module
defp adapter_name do
case Global.caller_adapter() do
{adapter, _options} -> adapter
adapter -> adapter
end
end
@spec struct_response(String.t() | map) :: Response.t()
def struct_response(json) when is_binary(json) do
data = Jason.decode!(json, keys: :atoms)
struct(Response, data)
end
def struct_response(%{ok: ok, error_code: error_code, description: description}) do
%Response{
ok: ok,
error_code: error_code,
description: description
}
end
def struct_response(%{ok: ok, result: result}) do
%Response{
ok: ok,
result: result
}
end
end