Current section
Files
Jump to
Current section
Files
src/apiculture@encoding.erl
-module(apiculture@encoding).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/apiculture/encoding.gleam").
-export([encode/2, decode/2, uses_padding/1, name/1, hex_lower/0, hex_upper/0, base32_rfc/0, base32_rfc_unpadded/0, base32_hex/0, base32_crockford/0, base32_z/0, base36/0, base58/0, base62/0, base64/0, base64_url/0]).
-export_type([encoding/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.
?MODULEDOC(
" Encoding abstraction.\n"
"\n"
" This module is a thin wrapper around yabase for encoding and decoding\n"
" bytes. It normalizes decoding failures to apiculture's `Error` type and\n"
" records whether an encoding uses padding.\n"
).
-type encoding() :: {encoding, yabase@core@encoding:encoding(), boolean()}.
-file("src/apiculture/encoding.gleam", 17).
?DOC(" Encode bytes to string using the given encoding.\n").
-spec encode(encoding(), bitstring()) -> binary().
encode(Encoding, Bytes) ->
case yabase@core@encoding:encode(erlang:element(2, Encoding), Bytes) of
{ok, S} ->
S;
{error, _} ->
erlang:error(#{gleam_error => panic,
message => <<"yabase encode failed unexpectedly"/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"apiculture/encoding"/utf8>>,
function => <<"encode"/utf8>>,
line => 20})
end.
-file("src/apiculture/encoding.gleam", 25).
?DOC(" Decode string to bytes using the given encoding.\n").
-spec decode(encoding(), binary()) -> {ok, bitstring()} |
{error, apiculture@error:error()}.
decode(Encoding, Input) ->
case yabase@core@encoding:decode_as(erlang:element(2, Encoding), Input) of
{ok, Bytes} ->
{ok, Bytes};
{error, {invalid_character, _, _}} ->
{error, malformed_input};
{error, {invalid_length, _}} ->
{error, malformed_input};
{error, {unsupported_prefix, _}} ->
{error, malformed_input};
{error, {unsupported_multibase_encoding, _}} ->
{error, malformed_input};
{error, invalid_checksum} ->
{error, malformed_input};
{error, {invalid_hrp, _}} ->
{error, malformed_input};
{error, overflow} ->
{error, malformed_input};
{error, non_canonical} ->
{error, malformed_input};
{error, {negative_value, _}} ->
{error, malformed_input};
{error, {unsupported_for_int, _}} ->
{error, malformed_input}
end.
-file("src/apiculture/encoding.gleam", 43).
?DOC(" Returns whether the encoding uses padding.\n").
-spec uses_padding(encoding()) -> boolean().
uses_padding(Encoding) ->
erlang:element(3, Encoding).
-file("src/apiculture/encoding.gleam", 48).
?DOC(" Returns the name of the encoding.\n").
-spec name(encoding()) -> binary().
name(Encoding) ->
yabase@core@encoding:multibase_name(erlang:element(2, Encoding)).
-file("src/apiculture/encoding.gleam", 57).
?DOC(" Lowercase hexadecimal encoding.\n").
-spec hex_lower() -> encoding().
hex_lower() ->
{encoding, yabase@core@encoding:base16(), false}.
-file("src/apiculture/encoding.gleam", 62).
?DOC(" Uppercase hexadecimal encoding.\n").
-spec hex_upper() -> encoding().
hex_upper() ->
{encoding, yabase@core@encoding:base16(), false}.
-file("src/apiculture/encoding.gleam", 67).
?DOC(" RFC 4648 Base32 encoding (padded variant).\n").
-spec base32_rfc() -> encoding().
base32_rfc() ->
{encoding, yabase@core@encoding:base32_rfc4648(), true}.
-file("src/apiculture/encoding.gleam", 72).
?DOC(" RFC 4648 Base32 encoding (unpadded variant).\n").
-spec base32_rfc_unpadded() -> encoding().
base32_rfc_unpadded() ->
{encoding, yabase@core@encoding:base32_rfc4648(), false}.
-file("src/apiculture/encoding.gleam", 77).
?DOC(" Base32hex encoding.\n").
-spec base32_hex() -> encoding().
base32_hex() ->
{encoding, yabase@core@encoding:base32_hex(), true}.
-file("src/apiculture/encoding.gleam", 82).
?DOC(" Crockford's Base32 encoding.\n").
-spec base32_crockford() -> encoding().
base32_crockford() ->
{encoding, yabase@core@encoding:base32_crockford(), false}.
-file("src/apiculture/encoding.gleam", 87).
?DOC(" z-base-32 encoding.\n").
-spec base32_z() -> encoding().
base32_z() ->
{encoding, yabase@core@encoding:base32_z_base32(), false}.
-file("src/apiculture/encoding.gleam", 92).
?DOC(" Base36 encoding (lowercase).\n").
-spec base36() -> encoding().
base36() ->
{encoding, yabase@core@encoding:base36(), false}.
-file("src/apiculture/encoding.gleam", 97).
?DOC(" Base58 encoding (Bitcoin alphabet).\n").
-spec base58() -> encoding().
base58() ->
{encoding, yabase@core@encoding:base58_bitcoin(), false}.
-file("src/apiculture/encoding.gleam", 102).
?DOC(" Base62 encoding.\n").
-spec base62() -> encoding().
base62() ->
{encoding, yabase@core@encoding:base62(), false}.
-file("src/apiculture/encoding.gleam", 107).
?DOC(" Standard Base64 encoding.\n").
-spec base64() -> encoding().
base64() ->
{encoding, yabase@core@encoding:base64_standard(), true}.
-file("src/apiculture/encoding.gleam", 112).
?DOC(" Base64URL encoding (URL-safe).\n").
-spec base64_url() -> encoding().
base64_url() ->
{encoding, yabase@core@encoding:base64_url_safe(), true}.