Cannot read nested array in bencode
From a bencode input "li1ei2el3:stree", I get [1 2 [#object["[B" 0x5351baec "[B@5351baec"]]]
Note: the input was created using write-bencode and seems correct with respect to the spec
Reproducing code:
(ns b
(:require [bencode.core :as b]))
(defn bread
[content]
(-> (.getBytes content "UTF-8")
java.io.ByteArrayInputStream.
java.io.PushbackInputStream.
b/read-bencode))
(bread "li1ei2el3:stree")
I am using version from babashka 0.6.4, so I guess this is the latest.
A quick check showed that this is not an issue for nested maps.
So, after investigating this issue, I found some magic performed in the test: the function <bytes. As I understand it, it transforms the raw bytes that were decoded into beautiful UTF-8 strings. As I am writing this, it seems completely legit, because the string can have any charset.
Though I just discovered this library, I would say that converting every byte-array to an original string form is quite common. I would gladly appreciate a nice utility function to convert all those bytes to string, using a custom function.
I see that it applies to both bencode and netstring.
What do you think?
https://github.com/nrepl/bencode/blob/4286ceef3cc7e9531b8e1650d0a1ff243b150dcd/test/bencode/core_test.clj#L23-L41