Current section

Files

Jump to
postgleam src postgleam@codec@inet.erl
Raw

src/postgleam@codec@inet.erl

-module(postgleam@codec@inet).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/postgleam/codec/inet.gleam").
-export([encode/1, decode/1, matcher/0]).
-file("src/postgleam/codec/inet.gleam", 27).
-spec encode(postgleam@value:value()) -> {ok, bitstring()} | {error, binary()}.
encode(Val) ->
case Val of
{inet, Family, Address, Netmask} ->
Addr_len = erlang:byte_size(Address),
Is_cidr = case Family of
2 ->
case Netmask =:= 32 of
true ->
0;
false ->
1
end;
3 ->
case Netmask =:= 128 of
true ->
0;
false ->
1
end;
_ ->
0
end,
{ok, <<Family, Netmask, Is_cidr, Addr_len, Address/bitstring>>};
_ ->
{error, <<"inet codec: expected Inet value"/utf8>>}
end.
-file("src/postgleam/codec/inet.gleam", 50).
-spec decode(bitstring()) -> {ok, postgleam@value:value()} | {error, binary()}.
decode(Data) ->
case Data of
<<Family, Netmask, _, Addr_len, Address/bitstring>> ->
case erlang:byte_size(Address) >= Addr_len of
true ->
Addr@1 = case gleam_stdlib:bit_array_slice(
Address,
0,
Addr_len
) of
{ok, Addr} -> Addr;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"postgleam/codec/inet"/utf8>>,
function => <<"decode"/utf8>>,
line => 55,
value => _assert_fail,
start => 1412,
'end' => 1471,
pattern_start => 1423,
pattern_end => 1431})
end,
{ok, {inet, Family, Addr@1, Netmask}};
false ->
{error, <<"inet codec: address too short"/utf8>>}
end;
_ ->
{error, <<"inet codec: invalid data"/utf8>>}
end.
-file("src/postgleam/codec/inet.gleam", 23).
-spec build(integer()) -> postgleam@codec:codec().
build(Type_oid) ->
{codec, <<"inet"/utf8>>, Type_oid, binary, fun encode/1, fun decode/1}.
-file("src/postgleam/codec/inet.gleam", 13).
-spec matcher() -> postgleam@codec:codec_matcher().
matcher() ->
{codec_matcher, <<"inet"/utf8>>, [869, 650], none, binary, fun build/1}.