Current section
Files
Jump to
Current section
Files
src/plunk@contacts.erl
-module(plunk@contacts).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get/2, list/1, count/1, create/2, subscribe/2, unsubscribe/2, delete/2, decode/2]).
-export_type([action_result/0, for/0, create_contact_data/0, subscription_data/0]).
-type action_result() :: {get_contact_result,
plunk@internal@contacts_def:extended_contact()} |
{list_contacts_result, list(plunk@internal@contacts_def:contact())} |
{count_contacts_result, plunk@internal@contacts_def:count()} |
{create_contact_result, plunk@internal@contacts_def:created_contact()} |
{subscription_result, plunk@internal@contacts_def:subscription()} |
{delete_contact_result, plunk@internal@contacts_def:deleted_contact()}.
-type for() :: get_contact |
list_contacts |
count_contacts |
create_contact |
subscribe |
unsubscribe |
delete_contact.
-type create_contact_data() :: {create_contact_data,
binary(),
boolean(),
gleam@option:option(list({binary(), binary()}))}.
-type subscription_data() :: {subscription, binary()}.
-spec get(plunk@instance:instance(), binary()) -> gleam@http@request:request(binary()).
get(Instance, Contact_id) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts/"/utf8, Contact_id/binary>>,
get,
<<""/utf8>>
).
-spec list(plunk@instance:instance()) -> gleam@http@request:request(binary()).
list(Instance) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts"/utf8>>,
get,
<<""/utf8>>
).
-spec count(plunk@instance:instance()) -> gleam@http@request:request(binary()).
count(Instance) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts/count"/utf8>>,
get,
<<""/utf8>>
).
-spec create(plunk@instance:instance(), create_contact_data()) -> gleam@http@request:request(binary()).
create(Instance, Contact) ->
Body = begin
_pipe = [{<<"email"/utf8>>,
gleam@json:string(erlang:element(2, Contact))},
{<<"subscribed"/utf8>>, gleam@json:bool(erlang:element(3, Contact))}],
_pipe@3 = (fun(Fields) -> case erlang:element(4, Contact) of
{some, D} ->
[{<<"data"/utf8>>,
begin
_pipe@1 = D,
_pipe@2 = gleam@list:map(
_pipe@1,
fun(Data) ->
{erlang:element(1, Data),
gleam@json:string(
erlang:element(2, Data)
)}
end
),
gleam@json:object(_pipe@2)
end} |
Fields];
none ->
Fields
end end)(_pipe),
_pipe@4 = gleam@json:object(_pipe@3),
gleam@json:to_string(_pipe@4)
end,
plunk@internal@bridge:make_request(
Instance,
<<"/contacts"/utf8>>,
post,
Body
).
-spec subscribe(plunk@instance:instance(), binary()) -> gleam@http@request:request(binary()).
subscribe(Instance, Id) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts/subscribe"/utf8>>,
post,
begin
_pipe = gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
gleam@json:to_string(_pipe)
end
).
-spec unsubscribe(plunk@instance:instance(), binary()) -> gleam@http@request:request(binary()).
unsubscribe(Instance, Id) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts/unsubscribe"/utf8>>,
post,
begin
_pipe = gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
gleam@json:to_string(_pipe)
end
).
-spec delete(plunk@instance:instance(), binary()) -> gleam@http@request:request(binary()).
delete(Instance, Id) ->
plunk@internal@bridge:make_request(
Instance,
<<"/contacts"/utf8>>,
delete,
begin
_pipe = gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
gleam@json:to_string(_pipe)
end
).
-spec try_decode(
gleam@http@response:response(binary()),
fun((IAQ) -> action_result()),
fun(() -> fun((gleam@dynamic:dynamic_()) -> {ok, IAQ} |
{error, list(gleam@dynamic:decode_error())}))
) -> {ok, action_result()} | {error, plunk@types:plunk_error()}.
try_decode(Res, Constructor, Decoder) ->
gleam@result:'try'(
plunk@internal@bridge:decode(Res, Decoder),
fun(D) -> {ok, Constructor(D)} end
).
-spec decode(gleam@http@response:response(binary()), for()) -> {ok,
action_result()} |
{error, plunk@types:plunk_error()}.
decode(Res, For) ->
case For of
get_contact ->
try_decode(
Res,
fun(Field@0) -> {get_contact_result, Field@0} end,
fun plunk@internal@contacts_def:get_contact_decoder/0
);
list_contacts ->
try_decode(
Res,
fun(Field@0) -> {list_contacts_result, Field@0} end,
fun plunk@internal@contacts_def:list_contacts_decoder/0
);
count_contacts ->
try_decode(
Res,
fun(Field@0) -> {count_contacts_result, Field@0} end,
fun plunk@internal@contacts_def:count_decoder/0
);
create_contact ->
try_decode(
Res,
fun(Field@0) -> {create_contact_result, Field@0} end,
fun plunk@internal@contacts_def:created_contact_decoder/0
);
delete_contact ->
try_decode(
Res,
fun(Field@0) -> {delete_contact_result, Field@0} end,
fun plunk@internal@contacts_def:deleted_contact_decoder/0
);
subscribe ->
try_decode(
Res,
fun(Field@0) -> {subscription_result, Field@0} end,
fun plunk@internal@contacts_def:subscription_decoder/0
);
unsubscribe ->
try_decode(
Res,
fun(Field@0) -> {subscription_result, Field@0} end,
fun plunk@internal@contacts_def:subscription_decoder/0
)
end.