Current section
Files
Jump to
Current section
Files
src/corrosion@query_event.erl
-module(corrosion@query_event).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/corrosion/query_event.gleam").
-export([decoder/0]).
-export_type([query_event/0, change_type/0]).
-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(" This module allows for decoding query events returned by /v1/queries and /v1/subscriptions\n").
-type query_event() :: {columns, list(binary())} |
{row, integer(), list(gleam@dynamic:dynamic_())} |
{e_o_q, float(), gleam@option:option(integer())} |
{change,
change_type(),
integer(),
list(gleam@dynamic:dynamic_()),
integer()} |
{query_error, binary()}.
-type change_type() :: insert | update | delete.
-file("src/corrosion/query_event.gleam", 26).
-spec decoder() -> gleam@dynamic@decode:decoder(query_event()).
decoder() ->
Columns_decoder = begin
gleam@dynamic@decode:field(
<<"columns"/utf8>>,
gleam@dynamic@decode:list(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Columns) -> gleam@dynamic@decode:success({columns, Columns}) end
)
end,
Row_decoder = begin
Row_tuple_decoder = begin
gleam@dynamic@decode:field(
0,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Rowid) ->
gleam@dynamic@decode:field(
1,
gleam@dynamic@decode:list(
{decoder, fun gleam@dynamic@decode:decode_dynamic/1}
),
fun(Rowdata) ->
gleam@dynamic@decode:success({row, Rowid, Rowdata})
end
)
end
)
end,
gleam@dynamic@decode:field(
<<"row"/utf8>>,
Row_tuple_decoder,
fun(Row) -> gleam@dynamic@decode:success(Row) end
)
end,
Eoq_decoder = begin
Eoq_object_decoder = begin
gleam@dynamic@decode:field(
<<"time"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_float/1},
fun(Time) ->
gleam@dynamic@decode:optional_field(
<<"change_id"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Change_id) ->
gleam@dynamic@decode:success(
{e_o_q, Time, Change_id}
)
end
)
end
)
end,
gleam@dynamic@decode:field(
<<"eoq"/utf8>>,
Eoq_object_decoder,
fun(Eoq) -> gleam@dynamic@decode:success(Eoq) end
)
end,
Change_decoder = begin
Change_tuple_decoder = begin
Change_type_decoder = begin
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Value) -> case Value of
<<"insert"/utf8>> ->
gleam@dynamic@decode:success(insert);
<<"update"/utf8>> ->
gleam@dynamic@decode:success(update);
<<"delete"/utf8>> ->
gleam@dynamic@decode:success(delete);
_ ->
gleam@dynamic@decode:failure(
insert,
<<"ChangeType"/utf8>>
)
end end
)
end,
gleam@dynamic@decode:field(
0,
Change_type_decoder,
fun(Change_type) ->
gleam@dynamic@decode:field(
1,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Row_id) ->
gleam@dynamic@decode:field(
2,
gleam@dynamic@decode:list(
{decoder,
fun gleam@dynamic@decode:decode_dynamic/1}
),
fun(Values) ->
gleam@dynamic@decode:field(
3,
{decoder,
fun gleam@dynamic@decode:decode_int/1},
fun(Change_id@1) ->
gleam@dynamic@decode:success(
{change,
Change_type,
Row_id,
Values,
Change_id@1}
)
end
)
end
)
end
)
end
)
end,
gleam@dynamic@decode:field(
<<"change"/utf8>>,
Change_tuple_decoder,
fun(Change) -> gleam@dynamic@decode:success(Change) end
)
end,
Error_decoder = begin
gleam@dynamic@decode:field(
<<"error"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Message) ->
gleam@dynamic@decode:success({query_error, Message})
end
)
end,
gleam@dynamic@decode:one_of(
Row_decoder,
[Change_decoder, Columns_decoder, Eoq_decoder, Error_decoder]
).