From 3e5a03b51c8debf0b9d41ca477d44f8fb976d65b Mon Sep 17 00:00:00 2001 From: Martin Ashby Date: Thu, 23 Nov 2023 22:13:07 +0000 Subject: Add bencoded number decoding --- main.roc | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/main.roc b/main.roc index 033ff1d..c90531f 100644 --- a/main.roc +++ b/main.roc @@ -25,10 +25,52 @@ expect res == Ok (Str.toUtf8 "foo") expect - errCases = ["foo", "1:foo", "4:foo", ":", "foo:", "1:", "::"] + errCases = [ + "", + "foo", + "1:foo", + "4:foo", + ":", + "foo:", + "1:", + "::", + ] List.all errCases \t -> res = bDecodeStr (Str.toUtf8 t) res == Err Malformatted +bDecodeNum: List U8 -> Result I64 [Malformatted] +bDecodeNum = \i -> + when i is + ['i', .., 'e'] -> + ii = List.sublist i {start: 1, len: ((List.len i) - 2)} + when (Str.fromUtf8 ii) is + Ok iii -> + when (Str.toI64 iii) is + Ok res -> Ok res + Err _err -> Err Malformatted + Err _err -> Err Malformatted + _ -> Err Malformatted + +expect + res = bDecodeNum (Str.toUtf8 "i32e") + res == Ok 32i64 + +expect + errCases = [ + "", + "foo", + "i32", + "32e", + "ifooe", + "ie", + "i", + "e", + "i522222222222222222343423432434322e", + ] + List.all errCases \t -> + res = bDecodeNum (Str.toUtf8 t) + res == Err Malformatted + main = Stdout.line "Hello, World" -- cgit v1.2.3-ZIG