-module(telega_hackney). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/telega_hackney.gleam"). -export([fetch_bits_adapter/1, fetch_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", 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", 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", 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).