Current section

Files

Jump to
oaspec src oaspec@internal@openapi@parser_value.erl
Raw

src/oaspec@internal@openapi@parser_value.erl

-module(oaspec@internal@openapi@parser_value).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/oaspec/internal/openapi/parser_value.gleam").
-export([extract_optional/2, extract_map/2]).
-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(false).
-file("src/oaspec/internal/openapi/parser_value.gleam", 18).
?DOC(false).
-spec from_node(yay:node_()) -> oaspec@internal@openapi@value: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/internal/openapi/parser_value.gleam", 42).
?DOC(false).
-spec extract_optional(yay:node_(), binary()) -> gleam@option:option(oaspec@internal@openapi@value: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/internal/openapi/parser_value.gleam", 53).
?DOC(false).
-spec extract_map(yay:node_(), binary()) -> gleam@dict:dict(binary(), oaspec@internal@openapi@value: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.