-module(caffeine_lang@value). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/value.gleam"). -export([to_string/1, to_preview_string/1, classify/1, extract_string/1, extract_int/1, extract_float/1, extract_bool/1, extract_list/1, extract_dict/1, extract_string_dict/1, is_nil/1]). -export_type([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 value() :: {string_value, binary()} | {int_value, integer()} | {float_value, float()} | {bool_value, boolean()} | {list_value, list(value())} | {dict_value, gleam@dict:dict(binary(), value())} | nil_value. -file("src/caffeine_lang/value.gleam", 24). ?DOC(false). -spec to_string(value()) -> binary(). to_string(Value) -> case Value of {string_value, S} -> S; {int_value, I} -> erlang:integer_to_binary(I); {float_value, F} -> gleam_stdlib:float_to_string(F); {bool_value, B} -> gleam@bool:to_string(B); {list_value, Items} -> <<<<"["/utf8, (begin _pipe = Items, _pipe@1 = gleam@list:map(_pipe, fun to_string/1), gleam@string:join(_pipe@1, <<", "/utf8>>) end)/binary>>/binary, "]"/utf8>>; {dict_value, D} -> <<<<"{"/utf8, (begin _pipe@2 = D, _pipe@3 = maps:to_list(_pipe@2), _pipe@4 = gleam@list:map( _pipe@3, fun(Pair) -> <<<<(erlang:element(1, Pair))/binary, ": "/utf8>>/binary, (to_string(erlang:element(2, Pair)))/binary>> end ), gleam@string:join(_pipe@4, <<", "/utf8>>) end)/binary>>/binary, "}"/utf8>>; nil_value -> <<""/utf8>> end. -file("src/caffeine_lang/value.gleam", 45). ?DOC(false). -spec to_preview_string(value()) -> binary(). to_preview_string(Value) -> case Value of {string_value, S} -> <<<<"\""/utf8, S/binary>>/binary, "\""/utf8>>; {int_value, I} -> erlang:integer_to_binary(I); {float_value, F} -> gleam_stdlib:float_to_string(F); {bool_value, B} -> gleam@bool:to_string(B); {list_value, _} -> <<"List"/utf8>>; {dict_value, _} -> <<"Dict"/utf8>>; nil_value -> <<"Nil"/utf8>> end. -file("src/caffeine_lang/value.gleam", 59). ?DOC(false). -spec classify(value()) -> binary(). classify(Value) -> case Value of {string_value, _} -> <<"String"/utf8>>; {int_value, _} -> <<"Int"/utf8>>; {float_value, _} -> <<"Float"/utf8>>; {bool_value, _} -> <<"Bool"/utf8>>; {list_value, _} -> <<"List"/utf8>>; {dict_value, _} -> <<"Dict"/utf8>>; nil_value -> <<"Nil"/utf8>> end. -file("src/caffeine_lang/value.gleam", 73). ?DOC(false). -spec extract_string(value()) -> {ok, binary()} | {error, nil}. extract_string(Value) -> case Value of {string_value, S} -> {ok, S}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 82). ?DOC(false). -spec extract_int(value()) -> {ok, integer()} | {error, nil}. extract_int(Value) -> case Value of {int_value, I} -> {ok, I}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 91). ?DOC(false). -spec extract_float(value()) -> {ok, float()} | {error, nil}. extract_float(Value) -> case Value of {float_value, F} -> {ok, F}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 100). ?DOC(false). -spec extract_bool(value()) -> {ok, boolean()} | {error, nil}. extract_bool(Value) -> case Value of {bool_value, B} -> {ok, B}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 109). ?DOC(false). -spec extract_list(value()) -> {ok, list(value())} | {error, nil}. extract_list(Value) -> case Value of {list_value, L} -> {ok, L}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 118). ?DOC(false). -spec extract_dict(value()) -> {ok, gleam@dict:dict(binary(), value())} | {error, nil}. extract_dict(Value) -> case Value of {dict_value, D} -> {ok, D}; _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 128). ?DOC(false). -spec extract_string_dict(value()) -> {ok, gleam@dict:dict(binary(), binary())} | {error, nil}. extract_string_dict(Value) -> case Value of {dict_value, D} -> _pipe = D, _pipe@1 = maps:to_list(_pipe), _pipe@2 = gleam@list:try_map( _pipe@1, fun(Pair) -> case erlang:element(2, Pair) of {string_value, S} -> {ok, {erlang:element(1, Pair), S}}; _ -> {error, nil} end end ), gleam@result:map(_pipe@2, fun maps:from_list/1); _ -> {error, nil} end. -file("src/caffeine_lang/value.gleam", 146). ?DOC(false). -spec is_nil(value()) -> boolean(). is_nil(Value) -> case Value of nil_value -> true; _ -> false end.