summaryrefslogtreecommitdiff
path: root/src/Data/BEncode
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/BEncode')
-rw-r--r--src/Data/BEncode/Pretty.hs15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/Data/BEncode/Pretty.hs b/src/Data/BEncode/Pretty.hs
index 63efc61c..89fcb489 100644
--- a/src/Data/BEncode/Pretty.hs
+++ b/src/Data/BEncode/Pretty.hs
@@ -7,6 +7,9 @@ import qualified Data.ByteString.Lazy as BL
7import qualified Data.ByteString.Lazy.Char8 as BL8 7import qualified Data.ByteString.Lazy.Char8 as BL8
8import Data.Text (Text) 8import Data.Text (Text)
9import qualified Data.Text as T 9import qualified Data.Text as T
10import Data.Text.Encoding
11import Text.Printf
12import qualified Data.ByteString.Base16 as Base16
10#ifdef BENCODE_AESON 13#ifdef BENCODE_AESON
11import Data.BEncode.BDict hiding (map) 14import Data.BEncode.BDict hiding (map)
12import Data.Aeson.Types hiding (parse) 15import Data.Aeson.Types hiding (parse)
@@ -14,12 +17,9 @@ import Data.Aeson.Encode.Pretty
14import qualified Data.HashMap.Strict as HashMap 17import qualified Data.HashMap.Strict as HashMap
15import qualified Data.Vector as Vector 18import qualified Data.Vector as Vector
16import Data.Foldable as Foldable 19import Data.Foldable as Foldable
17import Data.Text.Encoding
18import Text.Printf
19#endif 20#endif
20 21
21#ifdef BENCODE_AESON 22{-
22
23unhex :: Text -> BS.ByteString 23unhex :: Text -> BS.ByteString
24unhex t = BS.pack $ map unhex1 [0 .. BS.length nibs `div` 2] 24unhex t = BS.pack $ map unhex1 [0 .. BS.length nibs `div` 2]
25 where 25 where
@@ -31,6 +31,9 @@ unhex t = BS.pack $ map unhex1 [0 .. BS.length nibs `div` 2]
31 31
32hex :: BS.ByteString -> Text 32hex :: BS.ByteString -> Text
33hex bs = T.concat $ map (T.pack . printf "%02X") $ BS.unpack bs 33hex bs = T.concat $ map (T.pack . printf "%02X") $ BS.unpack bs
34-}
35
36#ifdef BENCODE_AESON
34 37
35quote_chr :: Char 38quote_chr :: Char
36quote_chr = ' ' 39quote_chr = ' '
@@ -39,12 +42,12 @@ quote :: Text -> Text
39quote t = quote_chr `T.cons` t `T.snoc` quote_chr 42quote t = quote_chr `T.cons` t `T.snoc` quote_chr
40 43
41encodeByteString :: BS.ByteString -> Text 44encodeByteString :: BS.ByteString -> Text
42encodeByteString s = either (const $ hex s) quote $ decodeUtf8' s 45encodeByteString s = either (const . decodeUtf8 $ Base16.encode s) quote $ decodeUtf8' s
43 46
44decodeByteString :: Text -> BS.ByteString 47decodeByteString :: Text -> BS.ByteString
45decodeByteString s 48decodeByteString s
46 | T.head s==quote_chr = encodeUtf8 (T.takeWhile (/=quote_chr) $ T.drop 1 s) 49 | T.head s==quote_chr = encodeUtf8 (T.takeWhile (/=quote_chr) $ T.drop 1 s)
47 | otherwise = unhex s 50 | otherwise = fst (Base16.decode (encodeUtf8 s))
48 51
49instance ToJSON BValue where 52instance ToJSON BValue where
50 toJSON (BInteger x) = Number $ fromIntegral x 53 toJSON (BInteger x) = Number $ fromIntegral x