Packages

hackney adapter for Telega Telegram Bot Library

Current section

Files

Jump to
telega_hackney src telega_hackney.erl
Raw

src/telega_hackney.erl

-module(telega_hackney).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/telega_hackney.gleam").
-export([fetch_adapter/1, fetch_bits_adapter/1, new/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" hackney adapter for the Telega Telegram Bot Library.\n"
"\n"
" Provides a `TelegramClient` that uses `gleam_hackney` as the HTTP backend.\n"
"\n"
" ```gleam\n"
" import telega\n"
" import telega_hackney\n"
"\n"
" pub fn main() {\n"
" let client = telega_hackney.new(\"BOT_TOKEN\")\n"
" let assert Ok(_bot) =\n"
" telega.new_for_polling(client)\n"
" |> telega.with_router(router)\n"
" |> telega.init_for_polling_nil_session()\n"
" }\n"
" ```\n"
).
-file("src/telega_hackney.gleam", 40).
?DOC(
" The hackney fetch adapter for JSON API requests.\n"
"\n"
" Exposed so you can use it with `client.set_fetch_client` if needed.\n"
).
-spec fetch_adapter(gleam@http@request:request(binary())) -> {ok,
gleam@http@response:response(binary())} |
{error, telega@error:telega_error()}.
fetch_adapter(Req) ->
_pipe = gleam@hackney:send(Req),
gleam@result:map_error(
_pipe,
fun(Err) -> {fetch_error, gleam@string:inspect(Err)} end
).
-file("src/telega_hackney.gleam", 50).
?DOC(
" The hackney fetch adapter for binary file downloads.\n"
"\n"
" Exposed so you can use it with `client.set_fetch_bits_client` if needed.\n"
).
-spec fetch_bits_adapter(gleam@http@request:request(bitstring())) -> {ok,
gleam@http@response:response(bitstring())} |
{error, telega@error:telega_error()}.
fetch_bits_adapter(Req) ->
_pipe = Req,
_pipe@1 = gleam@http@request:map(
_pipe,
fun gleam@bytes_tree:from_bit_array/1
),
_pipe@2 = gleam@hackney:send_bits(_pipe@1),
gleam@result:map_error(
_pipe@2,
fun(Err) -> {fetch_error, gleam@string:inspect(Err)} end
).
-file("src/telega_hackney.gleam", 32).
?DOC(
" Create a new Telegram client using hackney as the HTTP backend.\n"
"\n"
" This sets up both `FetchClient` (for JSON API calls) and\n"
" `FetchBitsClient` (for binary file downloads).\n"
).
-spec new(binary()) -> telega@client:telegram_client().
new(Token) ->
_pipe = telega@client:new(Token, fun fetch_adapter/1),
telega@client:set_fetch_bits_client(_pipe, fun fetch_bits_adapter/1).