Current section
Files
Jump to
Current section
Files
src/glitch@api@chat.erl
-module(glitch@api@chat).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([message_from_json/1, send_message/2]).
-export_type([message/0, send_message_request/0, send_message_error/0]).
-type message() :: {message, binary(), boolean()}.
-type send_message_request() :: {send_message_request,
binary(),
binary(),
binary(),
gleam@option:option(binary())}.
-type send_message_error() :: {decode_error, gleam@json:decode_error()} |
request_error.
-spec message_decoder() -> fun((gleam@dynamic:dynamic_()) -> {ok, message()} |
{error, list(gleam@dynamic:decode_error())}).
message_decoder() ->
gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {message, Field@0, Field@1} end,
gleam@dynamic:field(<<"message_id"/utf8>>, fun gleam@dynamic:string/1),
gleam@dynamic:field(<<"is_sent"/utf8>>, fun gleam@dynamic:bool/1)
).
-spec message_from_json(binary()) -> {ok, message()} |
{error, gleam@json:decode_error()}.
message_from_json(Json_string) ->
gleam@json:decode(Json_string, message_decoder()).
-spec send_message_request_to_json(send_message_request()) -> gleam@json:json().
send_message_request_to_json(Request) ->
gleam@json:object(
[{<<"broadcaster_id"/utf8>>,
gleam@json:string(erlang:element(2, Request))},
{<<"sender_id"/utf8>>,
gleam@json:string(erlang:element(3, Request))},
{<<"message"/utf8>>, gleam@json:string(erlang:element(4, Request))},
{<<"reply_parent_message_id"/utf8>>,
glitch@extended@json_ext:option(
erlang:element(5, Request),
fun gleam@json:string/1
)}]
).
-spec send_message(glitch@api@client:client(), send_message_request()) -> {ok,
gleam@http@response:response(list(message()))} |
{error, send_message_error()}.
send_message(Client, Request) ->
Body = send_message_request_to_json(Request),
gleam@io:println(gleam@json:to_string(Body)),
Request@1 = begin
_pipe = gleam@http@request:new(),
_pipe@1 = gleam@http@request:set_body(
_pipe,
send_message_request_to_json(Request)
),
gleam@http@request:set_path(_pipe@1, <<"chat/messages"/utf8>>)
end,
gleam@result:'try'(
begin
_pipe@2 = Client,
_pipe@3 = glitch@api@client:post(_pipe@2, Request@1),
gleam@result:replace_error(_pipe@3, request_error)
end,
fun(Response) -> _pipe@4 = Response,
_pipe@5 = gleam@http@response:try_map(
_pipe@4,
fun(_capture) ->
glitch@api@api_response:from_json(
_capture,
message_decoder()
)
end
),
_pipe@6 = gleam@result:'try'(
_pipe@5,
fun glitch@api@api_response:get_data_from_response/1
),
gleam@result:map_error(
_pipe@6,
fun(Field@0) -> {decode_error, Field@0} end
) end
).