-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 ).