Current section
Files
Jump to
Current section
Files
src/nori@schema.erl
-module(nori@schema).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/nori/schema.gleam").
-export([empty/0, format_to_string/1, parse_format/1]).
-export_type([schema/0, schema_type/0, json_type/0, additional_properties/0, discriminator/0, xml/0, external_documentation/0, format/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(
" JSON Schema types for OpenAPI 3.1.x.\n"
"\n"
" OpenAPI 3.1.x uses JSON Schema Draft 2020-12 for schema definitions.\n"
" This module provides comprehensive types for JSON Schema with OpenAPI extensions.\n"
).
-type schema() :: {schema,
gleam@option:option(binary()),
gleam@option:option(gleam@dict:dict(binary(), boolean())),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(gleam@dict:dict(binary(), schema())),
gleam@option:option(binary()),
list(nori@reference:ref(schema())),
list(nori@reference:ref(schema())),
list(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(gleam@dict:dict(binary(), nori@reference:ref(schema()))),
list(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@dict:dict(binary(), nori@reference:ref(schema())),
gleam@option:option(gleam@dict:dict(binary(), nori@reference:ref(schema()))),
gleam@option:option(additional_properties()),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(schema_type()),
gleam@option:option(gleam@json:json()),
gleam@option:option(list(gleam@json:json())),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(float()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(binary()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(boolean()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer()),
gleam@option:option(integer()),
list(binary()),
gleam@option:option(gleam@dict:dict(binary(), list(binary()))),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(nori@reference:ref(schema())),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(gleam@json:json()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@option:option(list(gleam@json:json())),
gleam@option:option(discriminator()),
gleam@option:option(xml()),
gleam@option:option(external_documentation()),
gleam@option:option(gleam@json:json()),
gleam@dict:dict(binary(), gleam@json:json())}.
-type schema_type() :: {single_type, json_type()} |
{multiple_types, list(json_type())}.
-type json_type() :: type_null |
type_boolean |
type_integer |
type_number |
type_string |
json_type_array |
type_object.
-type additional_properties() :: {additional_properties_bool, boolean()} |
{additional_properties_schema, nori@reference:ref(schema())}.
-type discriminator() :: {discriminator,
binary(),
gleam@option:option(gleam@dict:dict(binary(), binary())),
gleam@dict:dict(binary(), gleam@json:json())}.
-type xml() :: {xml,
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(boolean()),
gleam@option:option(boolean()),
gleam@dict:dict(binary(), gleam@json:json())}.
-type external_documentation() :: {external_documentation,
binary(),
gleam@option:option(binary()),
gleam@dict:dict(binary(), gleam@json:json())}.
-type format() :: format_date_time |
format_date |
format_time |
format_duration |
format_email |
format_idn_email |
format_hostname |
format_idn_hostname |
format_ipv4 |
format_ipv6 |
format_uri |
format_uri_reference |
format_iri |
format_iri_reference |
format_uuid |
format_uri_template |
format_json_pointer |
format_relative_json_pointer |
format_regex |
format_int32 |
format_int64 |
format_float |
format_double |
format_byte |
format_binary |
format_password |
{format_custom, binary()}.
-file("src/nori/schema.gleam", 150).
?DOC(" Creates an empty schema with all fields set to None/empty.\n").
-spec empty() -> schema().
empty() ->
{schema,
none,
none,
none,
none,
none,
none,
none,
none,
none,
[],
[],
[],
none,
none,
none,
none,
none,
[],
none,
none,
maps:new(),
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
[],
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
none,
maps:new()}.
-file("src/nori/schema.gleam", 252).
?DOC(" Converts a `Format` to its string representation.\n").
-spec format_to_string(format()) -> binary().
format_to_string(Format) ->
case Format of
format_date_time ->
<<"date-time"/utf8>>;
format_date ->
<<"date"/utf8>>;
format_time ->
<<"time"/utf8>>;
format_duration ->
<<"duration"/utf8>>;
format_email ->
<<"email"/utf8>>;
format_idn_email ->
<<"idn-email"/utf8>>;
format_hostname ->
<<"hostname"/utf8>>;
format_idn_hostname ->
<<"idn-hostname"/utf8>>;
format_ipv4 ->
<<"ipv4"/utf8>>;
format_ipv6 ->
<<"ipv6"/utf8>>;
format_uri ->
<<"uri"/utf8>>;
format_uri_reference ->
<<"uri-reference"/utf8>>;
format_iri ->
<<"iri"/utf8>>;
format_iri_reference ->
<<"iri-reference"/utf8>>;
format_uuid ->
<<"uuid"/utf8>>;
format_uri_template ->
<<"uri-template"/utf8>>;
format_json_pointer ->
<<"json-pointer"/utf8>>;
format_relative_json_pointer ->
<<"relative-json-pointer"/utf8>>;
format_regex ->
<<"regex"/utf8>>;
format_int32 ->
<<"int32"/utf8>>;
format_int64 ->
<<"int64"/utf8>>;
format_float ->
<<"float"/utf8>>;
format_double ->
<<"double"/utf8>>;
format_byte ->
<<"byte"/utf8>>;
format_binary ->
<<"binary"/utf8>>;
format_password ->
<<"password"/utf8>>;
{format_custom, S} ->
S
end.
-file("src/nori/schema.gleam", 285).
?DOC(" Parses a format string into a `Format`.\n").
-spec parse_format(binary()) -> format().
parse_format(Format_string) ->
case Format_string of
<<"date-time"/utf8>> ->
format_date_time;
<<"date"/utf8>> ->
format_date;
<<"time"/utf8>> ->
format_time;
<<"duration"/utf8>> ->
format_duration;
<<"email"/utf8>> ->
format_email;
<<"idn-email"/utf8>> ->
format_idn_email;
<<"hostname"/utf8>> ->
format_hostname;
<<"idn-hostname"/utf8>> ->
format_idn_hostname;
<<"ipv4"/utf8>> ->
format_ipv4;
<<"ipv6"/utf8>> ->
format_ipv6;
<<"uri"/utf8>> ->
format_uri;
<<"uri-reference"/utf8>> ->
format_uri_reference;
<<"iri"/utf8>> ->
format_iri;
<<"iri-reference"/utf8>> ->
format_iri_reference;
<<"uuid"/utf8>> ->
format_uuid;
<<"uri-template"/utf8>> ->
format_uri_template;
<<"json-pointer"/utf8>> ->
format_json_pointer;
<<"relative-json-pointer"/utf8>> ->
format_relative_json_pointer;
<<"regex"/utf8>> ->
format_regex;
<<"int32"/utf8>> ->
format_int32;
<<"int64"/utf8>> ->
format_int64;
<<"float"/utf8>> ->
format_float;
<<"double"/utf8>> ->
format_double;
<<"byte"/utf8>> ->
format_byte;
<<"binary"/utf8>> ->
format_binary;
<<"password"/utf8>> ->
format_password;
Other ->
{format_custom, Other}
end.