Current section
Files
Jump to
Current section
Files
src/galchemy@orm@codec.erl
-module(galchemy@orm@codec).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\galchemy\\orm\\codec.gleam").
-export([custom/2, define/2, codec/1, sql_type_name/1, encode/2, decode/2, nullable/1, value/2, int/0, text/0, float/0, bytea/0, uuid/0, numeric/0, json/0, jsonb/0, bool/0, timestamp/0, date/0, time_of_day/0, array/1, enum_/1, map/3]).
-export_type([codec/1, custom_codec/1, codec_error/0]).
-type codec(LJR) :: {codec,
fun((LJR) -> galchemy@ast@expression:sql_value()),
fun((galchemy@ast@expression:sql_value()) -> {ok, LJR} |
{error, codec_error()})}.
-type custom_codec(LJS) :: {custom_codec, binary(), codec(LJS)}.
-type codec_error() :: {unexpected_type, binary(), binary()} |
{custom, binary()}.
-file("src\\galchemy\\orm\\codec.gleam", 23).
-spec custom(
fun((LJT) -> galchemy@ast@expression:sql_value()),
fun((galchemy@ast@expression:sql_value()) -> {ok, LJT} |
{error, codec_error()})
) -> codec(LJT).
custom(Encoder, Decoder) ->
{codec, Encoder, Decoder}.
-file("src\\galchemy\\orm\\codec.gleam", 44).
-spec define(binary(), codec(LKD)) -> custom_codec(LKD).
define(Sql_type_name, Next_codec) ->
{custom_codec, Sql_type_name, Next_codec}.
-file("src\\galchemy\\orm\\codec.gleam", 48).
-spec codec(custom_codec(LKG)) -> codec(LKG).
codec(Next_custom_codec) ->
{custom_codec, _, Inner_codec} = Next_custom_codec,
Inner_codec.
-file("src\\galchemy\\orm\\codec.gleam", 53).
-spec sql_type_name(custom_codec(any())) -> binary().
sql_type_name(Next_custom_codec) ->
{custom_codec, Inner_name, _} = Next_custom_codec,
Inner_name.
-file("src\\galchemy\\orm\\codec.gleam", 231).
-spec encode(codec(LLG), LLG) -> galchemy@ast@expression:sql_value().
encode(Next_codec, Value) ->
{codec, Encoder, _} = Next_codec,
Encoder(Value).
-file("src\\galchemy\\orm\\codec.gleam", 236).
-spec decode(codec(LLI), galchemy@ast@expression:sql_value()) -> {ok, LLI} |
{error, codec_error()}.
decode(Next_codec, Value) ->
{codec, _, Decoder} = Next_codec,
Decoder(Value).
-file("src\\galchemy\\orm\\codec.gleam", 210).
-spec nullable(codec(LLC)) -> codec(gleam@option:option(LLC)).
nullable(Inner) ->
{codec, fun(Value) -> case Value of
{some, Inner_value} ->
encode(Inner, Inner_value);
none ->
null
end end, fun(Value@1) -> case Value@1 of
null ->
{ok, none};
_ ->
case decode(Inner, Value@1) of
{ok, Inner_value@1} ->
{ok, {some, Inner_value@1}};
{error, Error} ->
{error, Error}
end
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 244).
-spec value(codec(LLM), LLM) -> galchemy@ast@expression:expression().
value(Next_codec, Inner) ->
{value_expr, encode(Next_codec, Inner)}.
-file("src\\galchemy\\orm\\codec.gleam", 248).
-spec type_name(galchemy@ast@expression:sql_value()) -> binary().
type_name(Value) ->
case Value of
{text, _} ->
<<"Text"/utf8>>;
{int, _} ->
<<"Int"/utf8>>;
{float, _} ->
<<"Float"/utf8>>;
{bool, _} ->
<<"Bool"/utf8>>;
{bytea, _} ->
<<"Bytea"/utf8>>;
{uuid, _} ->
<<"Uuid"/utf8>>;
{numeric, _} ->
<<"Numeric"/utf8>>;
{json, _} ->
<<"Json"/utf8>>;
{jsonb, _} ->
<<"Jsonb"/utf8>>;
{enum, _, _} ->
<<"Enum"/utf8>>;
{array, _} ->
<<"Array"/utf8>>;
{timestamp, _} ->
<<"Timestamp"/utf8>>;
{date, _} ->
<<"Date"/utf8>>;
{time_of_day, _} ->
<<"TimeOfDay"/utf8>>;
null ->
<<"Null"/utf8>>
end.
-file("src\\galchemy\\orm\\codec.gleam", 58).
-spec int() -> codec(integer()).
int() ->
{codec, fun(Field@0) -> {int, Field@0} end, fun(Value) -> case Value of
{int, Inner} ->
{ok, Inner};
_ ->
{error, {unexpected_type, <<"Int"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 67).
-spec text() -> codec(binary()).
text() ->
{codec, fun(Field@0) -> {text, Field@0} end, fun(Value) -> case Value of
{text, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Text"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 76).
-spec float() -> codec(float()).
float() ->
{codec, fun(Field@0) -> {float, Field@0} end, fun(Value) -> case Value of
{float, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Float"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 85).
-spec bytea() -> codec(bitstring()).
bytea() ->
{codec, fun(Field@0) -> {bytea, Field@0} end, fun(Value) -> case Value of
{bytea, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Bytea"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 94).
-spec uuid() -> codec(binary()).
uuid() ->
{codec, fun(Field@0) -> {uuid, Field@0} end, fun(Value) -> case Value of
{uuid, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Uuid"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 103).
-spec numeric() -> codec(binary()).
numeric() ->
{codec, fun(Field@0) -> {numeric, Field@0} end, fun(Value) -> case Value of
{numeric, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Numeric"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 112).
-spec json() -> codec(binary()).
json() ->
{codec, fun(Field@0) -> {json, Field@0} end, fun(Value) -> case Value of
{json, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Json"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 121).
-spec jsonb() -> codec(binary()).
jsonb() ->
{codec, fun(Field@0) -> {jsonb, Field@0} end, fun(Value) -> case Value of
{jsonb, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Jsonb"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 130).
-spec bool() -> codec(boolean()).
bool() ->
{codec, fun(Field@0) -> {bool, Field@0} end, fun(Value) -> case Value of
{bool, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Bool"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 139).
-spec timestamp() -> codec(gleam@time@timestamp:timestamp()).
timestamp() ->
{codec,
fun(Field@0) -> {timestamp, Field@0} end,
fun(Value) -> case Value of
{timestamp, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type,
<<"Timestamp"/utf8>>,
type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 149).
-spec date() -> codec(gleam@time@calendar:date()).
date() ->
{codec, fun(Field@0) -> {date, Field@0} end, fun(Value) -> case Value of
{date, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type, <<"Date"/utf8>>, type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 158).
-spec time_of_day() -> codec(gleam@time@calendar:time_of_day()).
time_of_day() ->
{codec,
fun(Field@0) -> {time_of_day, Field@0} end,
fun(Value) -> case Value of
{time_of_day, Inner} ->
{ok, Inner};
_ ->
{error,
{unexpected_type,
<<"TimeOfDay"/utf8>>,
type_name(Value)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 168).
-spec array(codec(LKX)) -> codec(list(LKX)).
array(Inner) ->
{codec,
fun(Values) ->
{array,
gleam@list:map(Values, fun(Value) -> encode(Inner, Value) end)}
end,
fun(Value@1) -> case Value@1 of
{array, Values@1} ->
gleam@list:try_map(
Values@1,
fun(Item) -> decode(Inner, Item) end
);
_ ->
{error,
{unexpected_type, <<"Array"/utf8>>, type_name(Value@1)}}
end end}.
-file("src\\galchemy\\orm\\codec.gleam", 183).
-spec enum_(binary()) -> custom_codec(binary()).
enum_(Enum_type_name) ->
define(
Enum_type_name,
{codec,
fun(Value) -> {enum, Enum_type_name, Value} end,
fun(Value@1) -> case Value@1 of
{enum, Inner_type, Inner_value} ->
case Inner_type =:= Enum_type_name of
true ->
{ok, Inner_value};
false ->
{error,
{custom,
<<<<<<"Expected enum type "/utf8,
Enum_type_name/binary>>/binary,
", got "/utf8>>/binary,
Inner_type/binary>>}}
end;
_ ->
{error,
{unexpected_type,
<<"Enum"/utf8>>,
type_name(Value@1)}}
end end}
).
-file("src\\galchemy\\orm\\codec.gleam", 268).
-spec result_try(
{ok, LLO} | {error, LLP},
fun((LLO) -> {ok, LLS} | {error, LLP})
) -> {ok, LLS} | {error, LLP}.
result_try(Value, Next) ->
case Value of
{ok, Inner} ->
Next(Inner);
{error, Error} ->
{error, Error}
end.
-file("src\\galchemy\\orm\\codec.gleam", 30).
-spec map(
codec(LJX),
fun((LJX) -> {ok, LJZ} | {error, codec_error()}),
fun((LJZ) -> LJX)
) -> codec(LJZ).
map(Base, Decoder_map, Encoder_map) ->
{codec,
fun(Value) -> encode(Base, Encoder_map(Value)) end,
fun(Value@1) ->
result_try(
decode(Base, Value@1),
fun(Decoded) -> Decoder_map(Decoded) end
)
end}.