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