summaryrefslogtreecommitdiff
path: root/src/Data/BEncode/Internal.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/BEncode/Internal.hs')
-rw-r--r--src/Data/BEncode/Internal.hs11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/Data/BEncode/Internal.hs b/src/Data/BEncode/Internal.hs
index 4282cbf..e5ba89c 100644
--- a/src/Data/BEncode/Internal.hs
+++ b/src/Data/BEncode/Internal.hs
@@ -8,6 +8,7 @@
8-- This module provides bencode values serialization. Normally, you 8-- This module provides bencode values serialization. Normally, you
9-- don't need to import this module, use 'Data.BEncode' instead. 9-- don't need to import this module, use 'Data.BEncode' instead.
10-- 10--
11{-# LANGUAGE MagicHash #-}
11module Data.BEncode.Internal 12module Data.BEncode.Internal
12 ( -- * Parsing 13 ( -- * Parsing
13 parser 14 parser
@@ -23,10 +24,10 @@ import Control.Applicative
23import Data.Attoparsec.ByteString.Char8 (Parser) 24import Data.Attoparsec.ByteString.Char8 (Parser)
24import qualified Data.Attoparsec.ByteString.Char8 as P 25import qualified Data.Attoparsec.ByteString.Char8 as P
25import Data.ByteString as B 26import Data.ByteString as B
27import Data.ByteString.Internal as B (c2w, w2c)
26import qualified Data.ByteString.Lazy as Lazy 28import qualified Data.ByteString.Lazy as Lazy
27import qualified Data.ByteString.Lazy.Builder as B 29import qualified Data.ByteString.Lazy.Builder as B
28import qualified Data.ByteString.Lazy.Builder.ASCII as B 30import qualified Data.ByteString.Lazy.Builder.ASCII as B
29import Data.ByteString.Internal as B (c2w, w2c)
30import Data.Foldable 31import Data.Foldable
31import Data.List as L 32import Data.List as L
32import Data.Monoid 33import Data.Monoid
@@ -35,17 +36,23 @@ import Text.PrettyPrint hiding ((<>))
35import Data.BEncode.Types 36import Data.BEncode.Types
36import Data.BEncode.BDict as BD 37import Data.BEncode.BDict as BD
37 38
39import GHC.Types
40import GHC.Integer.GMP.Internals
38 41
39{-------------------------------------------------------------------- 42{--------------------------------------------------------------------
40-- Serialization 43-- Serialization
41--------------------------------------------------------------------} 44--------------------------------------------------------------------}
42 45
46integerDecimal :: Integer -> B.Builder
47integerDecimal (S# i#) = B.intDec (I# i#)
48integerDecimal i = B.string7 (show i) -- TODO more efficient
49
43-- | BEncode format encoder according to specification. 50-- | BEncode format encoder according to specification.
44builder :: BValue -> B.Builder 51builder :: BValue -> B.Builder
45builder = go 52builder = go
46 where 53 where
47 go (BInteger i) = B.word8 (c2w 'i') <> 54 go (BInteger i) = B.word8 (c2w 'i') <>
48 B.integerDec i <> 55 integerDecimal i <>
49 B.word8 (c2w 'e') 56 B.word8 (c2w 'e')
50 go (BString s) = buildString s 57 go (BString s) = buildString s
51 go (BList l) = B.word8 (c2w 'l') <> 58 go (BList l) = B.word8 (c2w 'l') <>