From 45609cdcc415a847558e31fb383ac1258a3e71af Mon Sep 17 00:00:00 2001 From: Hayleigh Thompson Date: Sat, 25 Jul 2026 22:55:01 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20a=20'validate'=20function=20t?= =?UTF-8?q?o=20check=20if=20an=20input=20string=20is=20valid=20base32.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/at/internal/base32.gleam | 60 ++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/src/at/internal/base32.gleam b/src/at/internal/base32.gleam index 1b26c0e..ff58316 100644 --- a/src/at/internal/base32.gleam +++ b/src/at/internal/base32.gleam @@ -1,5 +1,7 @@ -// DECODING -------------------------------------------------------------------- +// CONSTRUCTORS ---------------------------------------------------------------- +/// +/// pub fn decode(value: String) -> Result(BitArray, Nil) { do_decode(value, <<>>, 0) } @@ -82,7 +84,61 @@ fn finish_decode_base32( } } -// ENCODING -------------------------------------------------------------------- +// QUERIES --------------------------------------------------------------------- + +/// +/// +pub fn validate(input: String) -> Bool { + case input { + "a" <> rest + | "b" <> rest + | "c" <> rest + | "d" <> rest + | "e" <> rest + | "f" <> rest + | "g" <> rest + | "h" <> rest + | "i" <> rest + | "j" <> rest + | "k" <> rest + | "l" <> rest + | "m" <> rest + | "n" <> rest + | "o" <> rest + | "p" <> rest + | "q" <> rest + | "r" <> rest + | "s" <> rest + | "t" <> rest + | "u" <> rest + | "v" <> rest + | "w" <> rest + | "x" <> rest + | "y" <> rest + | "z" <> rest + | "2" <> rest + | "3" <> rest + | "4" <> rest + | "5" <> rest + | "6" <> rest + | "7" <> rest -> validate(rest) + + "=" <> rest -> validate_padding(rest) + "" -> True + + _ -> False + } +} + +fn validate_padding(input: String) -> Bool { + case input { + "" -> True + "=" <> rest -> validate_padding(rest) + _ -> False + } +} + +// CONVERSIONS ----------------------------------------------------------------- pub fn encode(bits: BitArray, pad: Bool) -> String { do_encode(bits, "", 0, pad) -- 2.51.2