encode with tests
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 12 Feb 2015 12:12:21 +0000 (17:42 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 12 Feb 2015 12:12:21 +0000 (17:42 +0530)
src/Bencode.hs

index 62627a6c9d94b1cf5f58233fcf8fb6d594748aa4..16e4a2b789edf3a87b87f661ca6e70c8c080254f 100644 (file)
@@ -121,7 +121,18 @@ decode = parse bencVal "BVal"
 -- "i0e"
 -- >>> encode (Bint 42)
 -- "i42e"
+-- >>> encode (Blist [(Bstr (BC.pack "spam")), (Bstr (BC.pack "eggs"))])
+-- "l4:spam4:eggse"
+-- >>> encode (Blist [])
+-- "le"
+-- >>> encode (Bdict (M.fromList [(Bstr $ BC.pack "spam", Bstr $ BC.pack "eggs")]))
+-- "d4:spam4:eggse"
 encode :: BVal -> String
 encode (Bstr bs) = let s = BC.unpack bs
                    in show (length s) ++ ":" ++ s
 encode (Bint i) = "i" ++ show i ++ "e"
+encode (Blist xs) = "l" ++ encodeList xs ++ "e"
+  where encodeList [] = ""
+        encodeList (x:xs) = encode x ++ encodeList xs
+encode (Bdict d) = "d" ++ encodeDict d ++ "e"
+  where encodeDict m = concat [encode k ++ encode (m M.! k) | k <- M.keys m]