Current section

Files

Jump to
postgleam src postgleam@error.erl
Raw

src/postgleam@error.erl

-module(postgleam@error).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/postgleam/error.gleam").
-export([parse_error_fields/1]).
-export_type([pg_error_fields/0, error/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 pg_error_fields() :: {pg_error_fields,
binary(),
binary(),
binary(),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary()),
gleam@option:option(binary())}.
-type error() :: {pg_error,
pg_error_fields(),
gleam@option:option(integer()),
gleam@option:option(binary())} |
{connection_error, binary()} |
{authentication_error, binary()} |
{encode_error, binary()} |
{decode_error, binary()} |
{protocol_error, binary()} |
{socket_error, binary()} |
timeout_error.
-file("src/postgleam/error.gleam", 70).
-spec field(gleam@dict:dict(binary(), binary()), binary()) -> binary().
field(Fields, Key) ->
case gleam_stdlib:map_get(Fields, Key) of
{ok, V} ->
V;
{error, _} ->
<<""/utf8>>
end.
-file("src/postgleam/error.gleam", 77).
-spec opt_field(gleam@dict:dict(binary(), binary()), binary()) -> gleam@option:option(binary()).
opt_field(Fields, Key) ->
case gleam_stdlib:map_get(Fields, Key) of
{ok, V} ->
{some, V};
{error, _} ->
none
end.
-file("src/postgleam/error.gleam", 48).
?DOC(" Parse a raw error field dict (from wire protocol) into structured PgErrorFields\n").
-spec parse_error_fields(gleam@dict:dict(binary(), binary())) -> pg_error_fields().
parse_error_fields(Fields) ->
{pg_error_fields,
field(Fields, <<"severity"/utf8>>),
field(Fields, <<"code"/utf8>>),
field(Fields, <<"message"/utf8>>),
opt_field(Fields, <<"detail"/utf8>>),
opt_field(Fields, <<"hint"/utf8>>),
opt_field(Fields, <<"position"/utf8>>),
opt_field(Fields, <<"internal_position"/utf8>>),
opt_field(Fields, <<"internal_query"/utf8>>),
opt_field(Fields, <<"where"/utf8>>),
opt_field(Fields, <<"schema"/utf8>>),
opt_field(Fields, <<"table"/utf8>>),
opt_field(Fields, <<"column"/utf8>>),
opt_field(Fields, <<"data_type"/utf8>>),
opt_field(Fields, <<"constraint"/utf8>>),
opt_field(Fields, <<"file"/utf8>>),
opt_field(Fields, <<"line"/utf8>>),
opt_field(Fields, <<"routine"/utf8>>)}.