Packages

Work with JSON Schema in Gleam. Supports building schemas as well as encoding decoding from json schema file.

Current section

Files

Jump to
castor src castor@decodex.erl
Raw

src/castor@decodex.erl

-module(castor@decodex).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/castor/decodex.gleam").
-export([default_field/4, optional_field/3, discriminate/4, number/0, any/0]).
-file("src/castor/decodex.gleam", 5).
-spec default_field(
any(),
gleam@dynamic@decode:decoder(FQG),
FQG,
fun((FQG) -> gleam@dynamic@decode:decoder(FQZ))
) -> gleam@dynamic@decode:decoder(FQZ).
default_field(Key, Decoder, Default, K) ->
gleam@dynamic@decode:optional_field(
Key,
Default,
begin
_pipe = gleam@dynamic@decode:optional(Decoder),
gleam@dynamic@decode:map(
_pipe,
fun(_capture) -> gleam@option:unwrap(_capture, Default) end
)
end,
K
).
-file("src/castor/decodex.gleam", 14).
-spec optional_field(
any(),
gleam@dynamic@decode:decoder(FRJ),
fun((gleam@option:option(FRJ)) -> gleam@dynamic@decode:decoder(FRH))
) -> gleam@dynamic@decode:decoder(FRH).
optional_field(Key, Decoder, K) ->
gleam@dynamic@decode:optional_field(
Key,
none,
gleam@dynamic@decode:optional(Decoder),
K
).
-file("src/castor/decodex.gleam", 18).
-spec discriminate(
any(),
gleam@dynamic@decode:decoder(FQO),
FQQ,
fun((FQO) -> {ok, gleam@dynamic@decode:decoder(FQQ)} | {error, binary()})
) -> gleam@dynamic@decode:decoder(FQQ).
discriminate(Field, Decoder, Default, Choose) ->
gleam@dynamic@decode:optional_field(
Field,
gleam@dynamic@decode:failure(Default, <<"Discriminator"/utf8>>),
gleam@dynamic@decode:map(Decoder, fun(On) -> case Choose(On) of
{ok, Decoder@1} ->
Decoder@1;
{error, Message} ->
gleam@dynamic@decode:failure(Default, Message)
end end),
fun(On@1) -> On@1 end
).
-file("src/castor/decodex.gleam", 37).
-spec number() -> gleam@dynamic@decode:decoder(float()).
number() ->
gleam@dynamic@decode:one_of(
{decoder, fun gleam@dynamic@decode:decode_float/1},
[gleam@dynamic@decode:map(
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun erlang:float/1
)]
).
-file("src/castor/decodex.gleam", 41).
-spec any() -> gleam@dynamic@decode:decoder(gleam@dynamic:dynamic_()).
any() ->
gleam@dynamic@decode:new_primitive_decoder(
<<"any"/utf8>>,
fun(Field@0) -> {ok, Field@0} end
).