Current section
Files
Jump to
Current section
Files
src/gilly@openapi@schema.erl
-module(gilly@openapi@schema).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gilly/openapi/schema.gleam").
-export([schema_decoder/0]).
-export_type([type_name/0, schema/0, base_schema/0, string_schema/0, integer_schema/0, array_schema/0, object_schema/0]).
-type type_name() :: string_type |
integer_type |
number_type |
array_type |
object_type |
boolean_type.
-type schema() :: {ref, binary()} |
{string, base_schema(), string_schema()} |
{integer, base_schema(), integer_schema()} |
{number, base_schema()} |
{array, base_schema(), array_schema()} |
{object, base_schema(), object_schema()} |
{boolean, base_schema()}.
-type base_schema() :: {base_schema,
type_name(),
gleam@option:option(binary()),
gleam@option:option(binary()),
boolean()}.
-type string_schema() :: {string_schema,
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(list(binary())),
gleam@option:option(binary())}.
-type integer_schema() :: {integer_schema,
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(binary())}.
-type array_schema() :: {array_schema,
gleam@option:option(integer()),
gleam@option:option(integer()),
schema()}.
-type object_schema() :: {object_schema,
list(binary()),
list({binary(), schema()})}.
-file("src/gilly/openapi/schema.gleam", 14).
-spec type_name_decoder() -> gleam@dynamic@decode:decoder(type_name()).
type_name_decoder() ->
gleam@dynamic@decode:then(
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Variant) -> case Variant of
<<"string"/utf8>> ->
gleam@dynamic@decode:success(string_type);
<<"integer"/utf8>> ->
gleam@dynamic@decode:success(integer_type);
<<"number"/utf8>> ->
gleam@dynamic@decode:success(number_type);
<<"array"/utf8>> ->
gleam@dynamic@decode:success(array_type);
<<"object"/utf8>> ->
gleam@dynamic@decode:success(object_type);
<<"boolean"/utf8>> ->
gleam@dynamic@decode:success(boolean_type);
_ ->
gleam@dynamic@decode:failure(
string_type,
<<"TypeName"/utf8>>
)
end end
).
-file("src/gilly/openapi/schema.gleam", 41).
-spec ref_decoder() -> gleam@dynamic@decode:decoder(schema()).
ref_decoder() ->
gleam@dynamic@decode:field(
<<"$ref"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Ref) -> gleam@dynamic@decode:success({ref, Ref}) end
).
-file("src/gilly/openapi/schema.gleam", 79).
-spec base_schema_decoder() -> gleam@dynamic@decode:decoder(base_schema()).
base_schema_decoder() ->
gleam@dynamic@decode:field(
<<"type"/utf8>>,
type_name_decoder(),
fun(Type_name) ->
gleam@dynamic@decode:optional_field(
<<"title"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Title) ->
gleam@dynamic@decode:optional_field(
<<"description"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Description) ->
gleam@dynamic@decode:optional_field(
<<"nullable"/utf8>>,
false,
{decoder,
fun gleam@dynamic@decode:decode_bool/1},
fun(Nullable) ->
gleam@dynamic@decode:success(
{base_schema,
Type_name,
Title,
Description,
Nullable}
)
end
)
end
)
end
)
end
).
-file("src/gilly/openapi/schema.gleam", 104).
-spec string_schema_decoder() -> gleam@dynamic@decode:decoder(string_schema()).
string_schema_decoder() ->
gleam@dynamic@decode:optional_field(
<<"minLength"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Min_length) ->
gleam@dynamic@decode:optional_field(
<<"maxLength"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Max_length) ->
gleam@dynamic@decode:optional_field(
<<"enum"/utf8>>,
none,
gleam@dynamic@decode:optional(
gleam@dynamic@decode:list(
{decoder,
fun gleam@dynamic@decode:decode_string/1}
)
),
fun(Enum) ->
gleam@dynamic@decode:optional_field(
<<"format"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder,
fun gleam@dynamic@decode:decode_string/1}
),
fun(Format) ->
gleam@dynamic@decode:success(
{string_schema,
Min_length,
Max_length,
Enum,
Format}
)
end
)
end
)
end
)
end
).
-file("src/gilly/openapi/schema.gleam", 136).
-spec integer_schema_decoder() -> gleam@dynamic@decode:decoder(integer_schema()).
integer_schema_decoder() ->
gleam@dynamic@decode:optional_field(
<<"minimum"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Minimum) ->
gleam@dynamic@decode:optional_field(
<<"maximum"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Maximum) ->
gleam@dynamic@decode:optional_field(
<<"format"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Format) ->
gleam@dynamic@decode:success(
{integer_schema, Minimum, Maximum, Format}
)
end
)
end
)
end
).
-file("src/gilly/openapi/schema.gleam", 159).
-spec array_schema_decoder() -> gleam@dynamic@decode:decoder(array_schema()).
array_schema_decoder() ->
gleam@dynamic@decode:optional_field(
<<"minItems"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Min_items) ->
gleam@dynamic@decode:optional_field(
<<"maxItems"/utf8>>,
none,
gleam@dynamic@decode:optional(
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Max_items) ->
gleam@dynamic@decode:field(
<<"items"/utf8>>,
schema_decoder(),
fun(Items) ->
gleam@dynamic@decode:success(
{array_schema, Min_items, Max_items, Items}
)
end
)
end
)
end
).
-file("src/gilly/openapi/schema.gleam", 37).
-spec schema_decoder() -> gleam@dynamic@decode:decoder(schema()).
schema_decoder() ->
gleam@dynamic@decode:one_of(ref_decoder(), [typed_schema_decoder()]).
-file("src/gilly/openapi/schema.gleam", 46).
-spec typed_schema_decoder() -> gleam@dynamic@decode:decoder(schema()).
typed_schema_decoder() ->
gleam@dynamic@decode:then(
base_schema_decoder(),
fun(Base_schema) -> case erlang:element(2, Base_schema) of
string_type ->
gleam@dynamic@decode:then(
string_schema_decoder(),
fun(String_schema) ->
gleam@dynamic@decode:success(
{string, Base_schema, String_schema}
)
end
);
integer_type ->
gleam@dynamic@decode:then(
integer_schema_decoder(),
fun(Integer_schema) ->
gleam@dynamic@decode:success(
{integer, Base_schema, Integer_schema}
)
end
);
number_type ->
gleam@dynamic@decode:success({number, Base_schema});
array_type ->
gleam@dynamic@decode:then(
array_schema_decoder(),
fun(Array_schema) ->
gleam@dynamic@decode:success(
{array, Base_schema, Array_schema}
)
end
);
object_type ->
gleam@dynamic@decode:then(
object_schema_decoder(),
fun(Object_schema) ->
gleam@dynamic@decode:success(
{object, Base_schema, Object_schema}
)
end
);
boolean_type ->
gleam@dynamic@decode:success({boolean, Base_schema})
end end
).
-file("src/gilly/openapi/schema.gleam", 178).
-spec object_schema_decoder() -> gleam@dynamic@decode:decoder(object_schema()).
object_schema_decoder() ->
gleam@dynamic@decode:optional_field(
<<"required"/utf8>>,
[],
gleam@dynamic@decode:list(
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Required) ->
gleam@dynamic@decode:optional_field(
<<"properties"/utf8>>,
[],
begin
_pipe = gleam@dynamic@decode:dict(
{decoder, fun gleam@dynamic@decode:decode_string/1},
schema_decoder()
),
gleam@dynamic@decode:map(_pipe, fun maps:to_list/1)
end,
fun(Properties) ->
gleam@dynamic@decode:success(
{object_schema, Required, Properties}
)
end
)
end
).