Packages
oaspec
0.16.0
0.68.0
0.67.0
0.66.0
0.65.0
0.64.0
0.63.0
0.62.0
0.61.0
0.60.0
0.59.0
0.58.1
0.58.0
0.57.0
0.56.0
0.55.0
0.54.0
0.53.0
0.52.0
0.51.0
0.50.0
0.49.0
0.48.0
0.47.0
0.46.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.3
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.1.3
Generate Gleam code from OpenAPI 3.x specifications
Current section
Files
Jump to
Current section
Files
src/oaspec@openapi@value.erl
-module(oaspec@openapi@value).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/openapi/value.gleam").
-export([extract_optional/2, extract_map/2]).
-export_type([json_value/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.
-type json_value() :: json_null |
{json_bool, boolean()} |
{json_int, integer()} |
{json_float, float()} |
{json_string, binary()} |
{json_array, list(json_value())} |
{json_object, gleam@dict:dict(binary(), json_value())}.
-file("src/oaspec/openapi/value.gleam", 19).
?DOC(" Convert a yay.Node to a JsonValue.\n").
-spec from_node(yay:node_()) -> json_value().
from_node(Node) ->
case Node of
node_nil ->
json_null;
{node_str, S} ->
{json_string, S};
{node_bool, B} ->
{json_bool, B};
{node_int, I} ->
{json_int, I};
{node_float, F} ->
{json_float, F};
{node_seq, Items} ->
{json_array, gleam@list:map(Items, fun from_node/1)};
{node_map, Entries} ->
{json_object,
begin
_pipe = gleam@list:filter_map(
Entries,
fun(Entry) ->
{K, V} = Entry,
case K of
{node_str, Key} ->
{ok, {Key, from_node(V)}};
_ ->
{error, nil}
end
end
),
maps:from_list(_pipe)
end}
end.
-file("src/oaspec/openapi/value.gleam", 43).
?DOC(
" Try to extract a JsonValue from a node at a given key.\n"
" Returns None if the key is absent or nil.\n"
).
-spec extract_optional(yay:node_(), binary()) -> gleam@option:option(json_value()).
extract_optional(Node, Key) ->
case yay:select_sugar(Node, Key) of
{ok, node_nil} ->
none;
{ok, Child} ->
{some, from_node(Child)};
{error, _} ->
none
end.
-file("src/oaspec/openapi/value.gleam", 54).
?DOC(
" Extract a dict of JsonValues from a node at a given key.\n"
" Returns empty dict if key is absent.\n"
).
-spec extract_map(yay:node_(), binary()) -> gleam@dict:dict(binary(), json_value()).
extract_map(Node, Key) ->
case yay:select_sugar(Node, Key) of
{ok, {node_map, Entries}} ->
_pipe = gleam@list:filter_map(
Entries,
fun(Entry) ->
{K, V} = Entry,
case K of
{node_str, Name} ->
{ok, {Name, from_node(V)}};
_ ->
{error, nil}
end
end
),
maps:from_list(_pipe);
_ ->
maps:new()
end.