-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, optional_string/2, optional_int/2, optional_float/2, bool_default/3, string_default/3, 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", 17). ?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", 41). ?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", 54). ?DOC(false). -spec optional_bool(yay:node_(), binary()) -> gleam@option:option(boolean()). optional_bool(Node, Key) -> case yay:extract_optional_bool(Node, Key) of {ok, Value} -> Value; {error, _} -> none end. -file("src/oaspec/internal/openapi/parser_value.gleam", 63). ?DOC(false). -spec optional_string(yay:node_(), binary()) -> gleam@option:option(binary()). optional_string(Node, Key) -> case yay:extract_optional_string(Node, Key) of {ok, Value} -> Value; {error, _} -> none end. -file("src/oaspec/internal/openapi/parser_value.gleam", 72). ?DOC(false). -spec optional_int(yay:node_(), binary()) -> gleam@option:option(integer()). optional_int(Node, Key) -> case yay:extract_optional_int(Node, Key) of {ok, Value} -> Value; {error, _} -> none end. -file("src/oaspec/internal/openapi/parser_value.gleam", 81). ?DOC(false). -spec optional_float(yay:node_(), binary()) -> gleam@option:option(float()). optional_float(Node, Key) -> case yay:extract_optional_float(Node, Key) of {ok, Value} -> Value; {error, _} -> none end. -file("src/oaspec/internal/openapi/parser_value.gleam", 92). ?DOC(false). -spec bool_default(yay:node_(), binary(), boolean()) -> boolean(). bool_default(Node, Key, Default) -> case optional_bool(Node, Key) of {some, Value} -> Value; none -> Default end. -file("src/oaspec/internal/openapi/parser_value.gleam", 100). ?DOC(false). -spec string_default(yay:node_(), binary(), binary()) -> binary(). string_default(Node, Key, Default) -> case optional_string(Node, Key) of {some, Value} -> Value; none -> Default end. -file("src/oaspec/internal/openapi/parser_value.gleam", 109). ?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.