-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A library for encoding and decoding of BEncode data. -- -- A library for encoding and decoding of BEncode data. -- -- -- -- @package bencoding @version 0.1.0.0 -- | This module provides convinient and fast way to serialize, deserealize -- and construct/destructure Bencoded values with optional fields. -- -- It supports four different types of values: -- -- -- -- To serialize any other types we need to make conversion. To make -- conversion more convenient there is type class for it: -- BEncodable. Any textual strings are considered as UTF8 encoded -- Text. -- -- The complete Augmented BNF syntax for bencoding format is: -- --
--   <BE>    ::= <DICT> | <LIST> | <INT> | <STR>
--   
--   <DICT>  ::= "d" 1 * (<STR> <BE>) "e"
--   <LIST>  ::= "l" 1 * <BE>         "e"
--   <INT>   ::= "i"     <SNUM>       "e"
--   <STR>   ::= <NUM> ":" n * <CHAR>; where n equals the <NUM>
--   
--   <SNUM>  ::= "-" <NUM> / <NUM>
--   <NUM>   ::= 1 * <DIGIT>
--   <CHAR>  ::= %
--   <DIGIT> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
--   
-- -- This module is considered to be imported qualified. module Data.BEncode -- | BEncode is straightforward ADT for b-encoded values. Please -- note that since dictionaries are sorted, in most cases we can compare -- BEncoded values without serialization and vice versa. Lists is not -- required to be sorted through. Also note that BEncode have -- JSON-like instance for Pretty. data BEncode BInteger :: {-# UNPACK #-} !Int64 -> BEncode BString :: !ByteString -> BEncode BList :: [BEncode] -> BEncode BDict :: Dict -> BEncode class BEncodable a toBEncode :: BEncodable a => a -> BEncode fromBEncode :: BEncodable a => BEncode -> Result a dictAssoc :: [(ByteString, BEncode)] -> BEncode type Result = Either String (-->) :: BEncodable a => ByteString -> a -> Assoc (-->?) :: BEncodable a => ByteString -> Maybe a -> Assoc fromAssocs :: [Assoc] -> BEncode -- | A faster version of fromAssocs. Should be used only when keys -- are sorted by ascending. fromAscAssocs :: [Assoc] -> BEncode reqKey :: BEncodable a => Map ByteString BEncode -> ByteString -> Result a optKey :: BEncodable a => Map ByteString BEncode -> ByteString -> Result (Maybe a) (>--) :: BEncodable a => Map ByteString BEncode -> ByteString -> Result a (>--?) :: BEncodable a => Map ByteString BEncode -> ByteString -> Result (Maybe a) encode :: BEncode -> ByteString decode :: ByteString -> Result BEncode encoded :: BEncodable a => a -> ByteString decoded :: BEncodable a => ByteString -> Result a isInteger :: BEncode -> Bool isString :: BEncode -> Bool isList :: BEncode -> Bool isDict :: BEncode -> Bool builder :: BEncode -> Builder -- | TODO try to replace peekChar with something else parser :: Parser BEncode decodingError :: String -> Result a printPretty :: BEncode -> IO () instance Show BEncode instance Read BEncode instance Eq BEncode instance Ord BEncode instance BEncodable Word instance BEncodable Word64 instance BEncodable Word32 instance BEncodable Word16 instance BEncodable Word8 instance BEncodable Version instance (BEncodable a, BEncodable b, BEncodable c, BEncodable d, BEncodable e) => BEncodable (a, b, c, d, e) instance (BEncodable a, BEncodable b, BEncodable c, BEncodable d) => BEncodable (a, b, c, d) instance (BEncodable a, BEncodable b, BEncodable c) => BEncodable (a, b, c) instance (BEncodable a, BEncodable b) => BEncodable (a, b) instance BEncodable () instance (Eq a, BEncodable a) => BEncodable (Set a) instance BEncodable a => BEncodable (Map ByteString a) instance BEncodable a => BEncodable [a] instance BEncodable Text instance BEncodable ByteString instance BEncodable Integer instance BEncodable Bool instance BEncodable Int instance BEncodable BEncode