]> git.rkrishnan.org Git - functorrent.git/commitdiff
WIP: impement benc encoding, needed for infohash computation
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 12 Feb 2015 06:34:55 +0000 (12:04 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Thu, 12 Feb 2015 06:34:55 +0000 (12:04 +0530)
src/Bencode.hs

index 4bbfa6269a47d51bbf1f200fb81bb3d7b7126175..62627a6c9d94b1cf5f58233fcf8fb6d594748aa4 100644 (file)
@@ -108,3 +108,20 @@ bencVal = Bstr <$> bencStr <|>
 
 decode :: BC.ByteString -> Either ParseError BVal
 decode = parse bencVal "BVal"
+
+-- given an input dict or int or string, encode
+-- it into a bencoded bytestring.
+-- | encode bencoded-values
+--
+-- >>> encode (Bstr (BC.pack ""))
+-- "0:"
+-- >>> encode (Bstr (BC.pack "spam"))
+-- "4:spam"
+-- >>> encode (Bint 0)
+-- "i0e"
+-- >>> encode (Bint 42)
+-- "i42e"
+encode :: BVal -> String
+encode (Bstr bs) = let s = BC.unpack bs
+                   in show (length s) ++ ":" ++ s
+encode (Bint i) = "i" ++ show i ++ "e"