-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | MessagePack -- -- MessagePack binary serialization format. @package Z-MessagePack @version 0.3.0.0 module Z.Data.MessagePack.Value -- | Representation of MessagePack data. data Value -- | true or false Bool :: !Bool -> Value -- | an integer Int :: {-# UNPACK #-} !Int64 -> Value -- | a floating point number Float :: {-# UNPACK #-} !Float -> Value -- | a floating point number Double :: {-# UNPACK #-} !Double -> Value -- | a UTF-8 string Str :: {-# UNPACK #-} !Text -> Value -- | a byte array Bin :: {-# UNPACK #-} !Bytes -> Value -- | a sequence of objects Array :: {-# UNPACK #-} !Vector Value -> Value -- | key-value pairs of objects Map :: {-# UNPACK #-} !Vector (Value, Value) -> Value Ext :: {-# UNPACK #-} !Word8 -> {-# UNPACK #-} !Bytes -> Value -- | nil Nil :: Value -- | Parse Value without consuming trailing bytes. parseValue :: Bytes -> (Bytes, Either ParseError Value) -- | Parse Value, if there're bytes left, parsing will fail. parseValue' :: Bytes -> Either ParseError Value -- | Increamental parse Value without consuming trailing bytes. parseValueChunks :: Monad m => m Bytes -> Bytes -> m (Bytes, Either ParseError Value) -- | Increamental parse Value, if there're bytes left, parsing will -- fail. parseValueChunks' :: Monad m => m Bytes -> Bytes -> m (Either ParseError Value) value :: Parser Value instance Z.Data.Text.Print.Print Z.Data.MessagePack.Value.Value instance GHC.Generics.Generic Z.Data.MessagePack.Value.Value instance GHC.Classes.Ord Z.Data.MessagePack.Value.Value instance GHC.Classes.Eq Z.Data.MessagePack.Value.Value instance GHC.Show.Show Z.Data.MessagePack.Value.Value instance Control.DeepSeq.NFData Z.Data.MessagePack.Value.Value instance Test.QuickCheck.Arbitrary.Arbitrary Z.Data.MessagePack.Value.Value -- | Builders to encode Haskell data types in MessagePack format. module Z.Data.MessagePack.Builder value :: Value -> Builder () nil :: Builder () bool :: Bool -> Builder () int :: Int64 -> Builder () float :: Float -> Builder () double :: Double -> Builder () -- | Construct a scientific value, see scientific. scientificValue :: Integer -> Int64 -> Value -- | Write a scientific value in ext 0x00(positive) and 0x01(negative) -- format, e.g. -- -- TODO: table -- -- TODO: table scientific :: Integer -> Int64 -> Builder () -- | Construct a timestamp(seconds, nanoseconds) value. timestampValue :: Int64 -> Int32 -> Value -- | Write a timestamp(seconds, nanoseconds) in ext 0xFF format, e.g. timestamp :: Int64 -> Int32 -> Builder () str' :: String -> Builder () str :: Text -> Builder () bin :: Bytes -> Builder () array :: Vec v a => (a -> Builder ()) -> v a -> Builder () array' :: (a -> Builder ()) -> [a] -> Builder () arrayHeader :: Int -> Builder () map :: (a -> Builder ()) -> (b -> Builder ()) -> Vector (a, b) -> Builder () map' :: (a -> Builder ()) -> (b -> Builder ()) -> [(a, b)] -> Builder () mapHeader :: Int -> Builder () ext :: Word8 -> Bytes -> Builder () -- | This module provides various tools to help user define -- MessagePack instance, please import MessagePack to get -- more instances. module Z.Data.MessagePack.Base -- | Type class for encode & decode MessagePack. class MessagePack a fromValue :: MessagePack a => Value -> Converter a fromValue :: (MessagePack a, Generic a, GFromValue (Rep a)) => Value -> Converter a toValue :: MessagePack a => a -> Value toValue :: (MessagePack a, Generic a, GToValue (Rep a)) => a -> Value encodeMessagePack :: MessagePack a => a -> Builder () encodeMessagePack :: (MessagePack a, Generic a, GEncodeMessagePack (Rep a)) => a -> Builder () -- | Representation of MessagePack data. data Value -- | true or false Bool :: !Bool -> Value -- | an integer Int :: {-# UNPACK #-} !Int64 -> Value -- | a floating point number Float :: {-# UNPACK #-} !Float -> Value -- | a floating point number Double :: {-# UNPACK #-} !Double -> Value -- | a UTF-8 string Str :: {-# UNPACK #-} !Text -> Value -- | a byte array Bin :: {-# UNPACK #-} !Bytes -> Value -- | a sequence of objects Array :: {-# UNPACK #-} !Vector Value -> Value -- | key-value pairs of objects Map :: {-# UNPACK #-} !Vector (Value, Value) -> Value Ext :: {-# UNPACK #-} !Word8 -> {-# UNPACK #-} !Bytes -> Value -- | nil Nil :: Value -- |
--   Settings T.pack T.pack False
--   
defaultSettings :: Settings -- | Generic encode/decode Settings data Settings Settings :: (String -> Text) -> (String -> Text) -> Bool -> Settings -- | format field labels [fieldFmt] :: Settings -> String -> Text -- | format constructor names [constrFmt] :: Settings -> String -> Text -- | take missing field as Nil? [missingKeyAsNil] :: Settings -> Bool -- | Decode a MessagePack bytes, return any trailing bytes. decode :: MessagePack a => Bytes -> (Bytes, Either DecodeError a) -- | Decode a MessagePack doc, trailing bytes are not allowed. decode' :: MessagePack a => Bytes -> Either DecodeError a -- | Decode MessagePack doc chunks, return trailing bytes. decodeChunks :: (MessagePack a, Monad m) => m Bytes -> Bytes -> m (Bytes, Either DecodeError a) -- | Directly encode data to MessagePack bytes. encode :: MessagePack a => a -> Bytes -- | Encode data to MessagePack bytes chunks. encodeChunks :: MessagePack a => a -> [Bytes] type DecodeError = Either ParseError ConvertError type ParseError = [Text] type ParseChunks (m :: Type -> Type) chunk err x = m chunk -> chunk -> m (chunk, Either err x) -- | Parse Value without consuming trailing bytes. parseValue :: Bytes -> (Bytes, Either ParseError Value) -- | Parse Value, if there're bytes left, parsing will fail. parseValue' :: Bytes -> Either ParseError Value -- | Increamental parse Value without consuming trailing bytes. parseValueChunks :: Monad m => m Bytes -> Bytes -> m (Bytes, Either ParseError Value) -- | Increamental parse Value, if there're bytes left, parsing will -- fail. parseValueChunks' :: Monad m => m Bytes -> Bytes -> m (Either ParseError Value) gToValue :: GToValue f => Settings -> f a -> Value gFromValue :: GFromValue f => Settings -> Value -> Converter (f a) gEncodeMessagePack :: GEncodeMessagePack f => Settings -> f a -> Builder () -- | Run a Converter with input value. convertValue :: MessagePack a => Value -> Either ConvertError a newtype Converter a Converter :: (forall r. () => ([PathElement] -> Text -> r) -> (a -> r) -> r) -> Converter a [runConverter] :: Converter a -> forall r. () => ([PathElement] -> Text -> r) -> (a -> r) -> r fail' :: Text -> Converter a () :: Converter a -> PathElement -> Converter a prependContext :: Text -> Converter a -> Converter a data PathElement Key :: {-# UNPACK #-} !Text -> PathElement Index :: {-# UNPACK #-} !Int -> PathElement Embedded :: PathElement data ConvertError ConvertError :: [PathElement] -> Text -> ConvertError [errPath] :: ConvertError -> [PathElement] [errMsg] :: ConvertError -> Text -- | Produce an error message like converting XXX failed, expected XXX, -- encountered XXX. typeMismatch :: Text -> Text -> Value -> Converter a fromNil :: Text -> a -> Value -> Converter a withBool :: Text -> (Bool -> Converter a) -> Value -> Converter a withStr :: Text -> (Text -> Converter a) -> Value -> Converter a withBin :: Text -> (Bytes -> Converter a) -> Value -> Converter a withArray :: Text -> (Vector Value -> Converter a) -> Value -> Converter a -- | Directly use Map as key-values for further converting. withKeyValues :: Text -> (Vector (Value, Value) -> Converter a) -> Value -> Converter a -- | Take a Map as an 'FM.FlatMap Value Value', on key duplication -- prefer first one. withFlatMap :: Text -> (FlatMap Value Value -> Converter a) -> Value -> Converter a -- | Take a Map as an 'FM.FlatMap Value Value', on key duplication -- prefer last one. withFlatMapR :: Text -> (FlatMap Value Value -> Converter a) -> Value -> Converter a -- | withBoundedScientific name f value applies f -- to the Scientific number when value is a Ext -- 0x00/0x01 with exponent less than or equal to 1024. withBoundedScientific :: Text -> (Scientific -> Converter a) -> Value -> Converter a withSystemTime :: Text -> (SystemTime -> Converter a) -> Value -> Converter a -- | Retrieve the value associated with the given key of an Map. The -- result is empty if the key is not present or the value cannot -- be converted to the desired type. -- -- This accessor is appropriate if the key and value must be -- present in an object for it to be valid. If the key and value are -- optional, use .:? instead. (.:) :: MessagePack a => FlatMap Value Value -> Text -> Converter a -- | Retrieve the value associated with the given key of an Map. The -- result is Nothing if the key is not present or if its value is -- Nil, or fail if the value cannot be converted to the desired -- type. -- -- This accessor is most useful if the key and value can be absent from -- an object without affecting its validity. If the key and value are -- mandatory, use .: instead. (.:?) :: MessagePack a => FlatMap Value Value -> Text -> Converter (Maybe a) -- | Retrieve the value associated with the given key of an Map. The -- result is Nothing if the key is not present or fail if the -- value cannot be converted to the desired type. -- -- This differs from .:? by attempting to convert Nil the -- same as any other MessagePack value, instead of interpreting it as -- Nothing. (.:!) :: MessagePack a => FlatMap Value Value -> Text -> Converter (Maybe a) convertField :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter a -- | Variant of .:? with explicit converter function. convertFieldMaybe :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter (Maybe a) -- | Variant of .:! with explicit converter function. convertFieldMaybe' :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter (Maybe a) -- | Connect key and value to a tuple to be used with object. (.=) :: MessagePack v => Text -> v -> (Value, Value) infixr 8 .= -- | Alias for Map . pack. object :: [(Value, Value)] -> Value -- | Connect key and value to a KVItem using colon, key will -- be escaped. (.!) :: MessagePack v => Text -> v -> KVItem infixr 8 .! -- | Write map header and KVItems. object' :: KVItem -> Builder () -- | A newtype for Builder, whose semigroup's instance is to connect -- kv builder and sum kv length. data KVItem instance Z.Data.MessagePack.Base.GConstrFromValue GHC.Generics.V1 instance forall k (f :: k -> *) (g :: k -> *). (Z.Data.MessagePack.Base.GConstrFromValue f, Z.Data.MessagePack.Base.GConstrFromValue g) => Z.Data.MessagePack.Base.GConstrFromValue (f GHC.Generics.:+: g) instance GHC.Generics.Constructor c => Z.Data.MessagePack.Base.GConstrFromValue (GHC.Generics.C1 c GHC.Generics.U1) instance forall k (c :: GHC.Generics.Meta) (sc :: GHC.Generics.Meta) (f :: k -> *). (GHC.Generics.Constructor c, Z.Data.MessagePack.Base.GFromValue (GHC.Generics.S1 sc f)) => Z.Data.MessagePack.Base.GConstrFromValue (GHC.Generics.C1 c (GHC.Generics.S1 sc f)) instance (Z.Data.Generics.Utils.ProductSize (a GHC.Generics.:*: b), Z.Data.MessagePack.Base.GFromFields (a GHC.Generics.:*: b), Z.Data.MessagePack.Base.GBuildLookup (a GHC.Generics.:*: b), GHC.Generics.Constructor c) => Z.Data.MessagePack.Base.GConstrFromValue (GHC.Generics.C1 c (a GHC.Generics.:*: b)) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Z.Data.MessagePack.Base.GConstrFromValue f => Z.Data.MessagePack.Base.GFromValue (GHC.Generics.D1 c f) instance forall k (a :: k -> *) (b :: k -> *). (Z.Data.MessagePack.Base.GBuildLookup a, Z.Data.MessagePack.Base.GBuildLookup b) => Z.Data.MessagePack.Base.GBuildLookup (a GHC.Generics.:*: b) instance forall k (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). Z.Data.MessagePack.Base.GBuildLookup (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). Z.Data.MessagePack.Base.GBuildLookup (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance (Z.Data.Generics.Utils.ProductSize a, Z.Data.MessagePack.Base.GFromFields a, Z.Data.MessagePack.Base.GFromFields b, Z.Data.MessagePack.Base.LookupTable a GHC.Types.~ Z.Data.MessagePack.Base.LookupTable b) => Z.Data.MessagePack.Base.GFromFields (a GHC.Generics.:*: b) instance forall k (f :: k -> *) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). Z.Data.MessagePack.Base.GFromValue f => Z.Data.MessagePack.Base.GFromFields (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (f :: k -> *) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). (Z.Data.MessagePack.Base.GFromValue f, GHC.Generics.Selector ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds)) => Z.Data.MessagePack.Base.GFromFields (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.GToValue (GHC.Generics.K1 i a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.K1 i a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.GFromValue (GHC.Generics.K1 i a) instance forall k (a :: k). Z.Data.MessagePack.Base.MessagePack (Data.Proxy.Proxy a) instance Z.Data.MessagePack.Base.MessagePack Z.Data.MessagePack.Value.Value instance Z.Data.MessagePack.Base.MessagePack Z.Data.Text.Base.Text instance Z.Data.MessagePack.Base.MessagePack Data.Scientific.Scientific instance (GHC.Classes.Ord a, Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b) => Z.Data.MessagePack.Base.MessagePack (Z.Data.Vector.FlatMap.FlatMap a b) instance (GHC.Classes.Ord a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Z.Data.Vector.FlatSet.FlatSet a) instance (GHC.Classes.Eq a, Data.Hashable.Class.Hashable a, Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b) => Z.Data.MessagePack.Base.MessagePack (Data.HashMap.Internal.HashMap a b) instance (GHC.Classes.Ord a, Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b) => Z.Data.MessagePack.Base.MessagePack (Data.Map.Internal.Map a b) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Z.Data.Vector.FlatIntMap.FlatIntMap a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.IntMap.Internal.IntMap a) instance Z.Data.MessagePack.Base.MessagePack Z.Data.Vector.FlatIntSet.FlatIntSet instance Z.Data.MessagePack.Base.MessagePack Data.IntSet.Internal.IntSet instance (GHC.Classes.Ord a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Data.Set.Internal.Set a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Sequence.Internal.Seq a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Tree.Tree a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Primitive.Array.Array a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Primitive.SmallArray.SmallArray a) instance (Data.Primitive.Types.Prim a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Data.Primitive.PrimArray.PrimArray a) instance (Z.Data.Array.UnliftedArray.PrimUnlifted a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Z.Data.Array.UnliftedArray.UnliftedArray a) instance Z.Data.MessagePack.Base.MessagePack Data.Primitive.ByteArray.ByteArray instance (Data.Primitive.Types.Prim a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Z.Data.Vector.Base.PrimVector a) instance Z.Data.MessagePack.Base.MessagePack Z.Data.Vector.Base.Bytes instance Z.Data.MessagePack.Base.MessagePack Z.Data.CBytes.CBytes instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Z.Data.Vector.Base.Vector a) instance (GHC.Classes.Eq a, Data.Hashable.Class.Hashable a, Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Data.HashSet.Internal.HashSet a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack [a] instance Z.Data.MessagePack.Base.MessagePack GHC.Base.String instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (GHC.Base.NonEmpty a) instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Bool instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Char instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Double instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Float instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Int instance Z.Data.MessagePack.Base.MessagePack GHC.Int.Int8 instance Z.Data.MessagePack.Base.MessagePack GHC.Int.Int16 instance Z.Data.MessagePack.Base.MessagePack GHC.Int.Int32 instance Z.Data.MessagePack.Base.MessagePack GHC.Int.Int64 instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Word instance Z.Data.MessagePack.Base.MessagePack GHC.Word.Word8 instance Z.Data.MessagePack.Base.MessagePack GHC.Word.Word16 instance Z.Data.MessagePack.Base.MessagePack GHC.Word.Word32 instance Z.Data.MessagePack.Base.MessagePack GHC.Word.Word64 instance Z.Data.MessagePack.Base.MessagePack GHC.Integer.Type.Integer instance Z.Data.MessagePack.Base.MessagePack GHC.Natural.Natural instance Z.Data.MessagePack.Base.MessagePack GHC.Types.Ordering instance Z.Data.MessagePack.Base.MessagePack () instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (GHC.Maybe.Maybe a) instance (Z.Data.MessagePack.Base.MessagePack a, GHC.Real.Integral a) => Z.Data.MessagePack.Base.MessagePack (GHC.Real.Ratio a) instance forall k (a :: k). Data.Fixed.HasResolution a => Z.Data.MessagePack.Base.MessagePack (Data.Fixed.Fixed a) instance forall k (f :: k -> *) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). Z.Data.MessagePack.Base.GFromValue f => Z.Data.MessagePack.Base.GFromValue (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (f :: k -> *) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). (Z.Data.MessagePack.Base.GFromValue f, GHC.Generics.Selector ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds)) => Z.Data.MessagePack.Base.GFromValue (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance Z.Data.MessagePack.Base.GConstrEncodeMessagePack GHC.Generics.V1 instance forall k (f :: k -> *) (g :: k -> *). (Z.Data.MessagePack.Base.GConstrEncodeMessagePack f, Z.Data.MessagePack.Base.GConstrEncodeMessagePack g) => Z.Data.MessagePack.Base.GConstrEncodeMessagePack (f GHC.Generics.:+: g) instance GHC.Generics.Constructor c => Z.Data.MessagePack.Base.GConstrEncodeMessagePack (GHC.Generics.C1 c GHC.Generics.U1) instance forall k (c :: GHC.Generics.Meta) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). (GHC.Generics.Constructor c, Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f)) => Z.Data.MessagePack.Base.GConstrEncodeMessagePack (GHC.Generics.C1 c (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f)) instance forall k (c :: GHC.Generics.Meta) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). (GHC.Generics.Constructor c, Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f)) => Z.Data.MessagePack.Base.GConstrEncodeMessagePack (GHC.Generics.C1 c (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f)) instance (Z.Data.MessagePack.Base.GEncodeMessagePack (a GHC.Generics.:*: b), Z.Data.MessagePack.Base.GAddProductSize (a GHC.Generics.:*: b), Z.Data.Generics.Utils.ProductSize (a GHC.Generics.:*: b), GHC.Generics.Constructor c) => Z.Data.MessagePack.Base.GConstrEncodeMessagePack (GHC.Generics.C1 c (a GHC.Generics.:*: b)) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Z.Data.MessagePack.Base.GConstrEncodeMessagePack f => Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.D1 c f) instance Z.Data.MessagePack.Base.GAddProductSize a => Z.Data.MessagePack.Base.GAddProductSize (a GHC.Generics.:*: b) instance Z.Data.MessagePack.Base.GAddProductSize (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance Z.Data.MessagePack.Base.GAddProductSize (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance forall k (f :: k -> *) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). (Z.Data.MessagePack.Base.GEncodeMessagePack f, GHC.Generics.Selector ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds)) => Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance forall k (f :: k -> *) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). Z.Data.MessagePack.Base.GEncodeMessagePack f => Z.Data.MessagePack.Base.GEncodeMessagePack (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (a :: k -> *) (b :: k -> *). (Z.Data.MessagePack.Base.GEncodeMessagePack a, Z.Data.MessagePack.Base.GEncodeMessagePack b) => Z.Data.MessagePack.Base.GEncodeMessagePack (a GHC.Generics.:*: b) instance Z.Data.MessagePack.Base.GConstrToValue GHC.Generics.V1 instance forall k (f :: k -> *) (g :: k -> *). (Z.Data.MessagePack.Base.GConstrToValue f, Z.Data.MessagePack.Base.GConstrToValue g) => Z.Data.MessagePack.Base.GConstrToValue (f GHC.Generics.:+: g) instance GHC.Generics.Constructor c => Z.Data.MessagePack.Base.GConstrToValue (GHC.Generics.C1 c GHC.Generics.U1) instance forall k (c :: GHC.Generics.Meta) (sc :: GHC.Generics.Meta) (f :: k -> *). (GHC.Generics.Constructor c, Z.Data.MessagePack.Base.GToValue (GHC.Generics.S1 sc f)) => Z.Data.MessagePack.Base.GConstrToValue (GHC.Generics.C1 c (GHC.Generics.S1 sc f)) instance (Z.Data.Generics.Utils.ProductSize (a GHC.Generics.:*: b), Z.Data.MessagePack.Base.GWriteFields (a GHC.Generics.:*: b), Z.Data.MessagePack.Base.GMergeFields (a GHC.Generics.:*: b), GHC.Generics.Constructor c) => Z.Data.MessagePack.Base.GConstrToValue (GHC.Generics.C1 c (a GHC.Generics.:*: b)) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). Z.Data.MessagePack.Base.GConstrToValue f => Z.Data.MessagePack.Base.GToValue (GHC.Generics.D1 c f) instance forall k (a :: k -> *) (b :: k -> *). Z.Data.MessagePack.Base.GMergeFields a => Z.Data.MessagePack.Base.GMergeFields (a GHC.Generics.:*: b) instance forall k (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). Z.Data.MessagePack.Base.GMergeFields (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness) (f :: k -> *). Z.Data.MessagePack.Base.GMergeFields (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance (Z.Data.Generics.Utils.ProductSize a, Z.Data.MessagePack.Base.GWriteFields a, Z.Data.MessagePack.Base.GWriteFields b, Z.Data.MessagePack.Base.Field a GHC.Types.~ Z.Data.MessagePack.Base.Field b) => Z.Data.MessagePack.Base.GWriteFields (a GHC.Generics.:*: b) instance forall k (f :: k -> *) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). Z.Data.MessagePack.Base.GToValue f => Z.Data.MessagePack.Base.GWriteFields (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance forall k (f :: k -> *) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). (Z.Data.MessagePack.Base.GToValue f, GHC.Generics.Selector ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds)) => Z.Data.MessagePack.Base.GWriteFields (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance forall k (f :: k -> *) (l :: GHC.Types.Symbol) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). (Z.Data.MessagePack.Base.GToValue f, GHC.Generics.Selector ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds)) => Z.Data.MessagePack.Base.GToValue (GHC.Generics.S1 ('GHC.Generics.MetaSel ('GHC.Maybe.Just l) u ss ds) f) instance forall k (f :: k -> *) (u :: GHC.Generics.SourceUnpackedness) (ss :: GHC.Generics.SourceStrictness) (ds :: GHC.Generics.DecidedStrictness). Z.Data.MessagePack.Base.GToValue f => Z.Data.MessagePack.Base.GToValue (GHC.Generics.S1 ('GHC.Generics.MetaSel 'GHC.Maybe.Nothing u ss ds) f) instance GHC.Base.Semigroup Z.Data.MessagePack.Base.KVItem -- | This module provides an interface similar to Z.Data.JSON, to -- work with MessagePack binary format. -- -- -- -- The easiest way to use the library is to define target data type, -- deriving Generic and MessagePack instances, e.g. -- --
--   import GHC.Generics (Generic)
--   import qualified Z.Data.MessagePack as MessagePack
--   import qualified Z.Data.Text as T
--   
--   data Person = Person {name :: T.Text, age :: Int}
--       deriving (Show, Generic)
--       deriving anyclass (MessagePack.MessagePack)
--   
--   > MessagePack.encode Person{ name="Alice", age=16 }
--   > [130,164,110,97,109,101,165,65,108,105,99,101,163,97,103,101,16]
--   
-- -- MessagePack is a schemaless format, which means the encoded data can -- be recovered into some form(Value in haskell case) without -- providing data definition, e.g. the data encoded above: -- --
--   [130,   164,   110,   97,   109,   101,   165,   65,   108,   105,   99,   101,   163,   97,   103,   101,   16]
--    0x82   0xA4   'n'    'a'   'm'    'e'    0xA5   'A'   'l'    'i'    'c'   'e'    0xA3   'a'   'g'    'e'    int
--    map    str                               str                                     str                        16
--    2kvs   4bytes                            5bytes                                  3bytes
--   
-- -- This property makes it suitable for passing data across language -- boundary, e.g. from a static typed language to a dynamic one, at the -- cost of a lower space efficiency(i.e. type tag and field label). module Z.Data.MessagePack -- | Type class for encode & decode MessagePack. class MessagePack a fromValue :: MessagePack a => Value -> Converter a fromValue :: (MessagePack a, Generic a, GFromValue (Rep a)) => Value -> Converter a toValue :: MessagePack a => a -> Value toValue :: (MessagePack a, Generic a, GToValue (Rep a)) => a -> Value encodeMessagePack :: MessagePack a => a -> Builder () encodeMessagePack :: (MessagePack a, Generic a, GEncodeMessagePack (Rep a)) => a -> Builder () -- | Representation of MessagePack data. data Value -- | true or false Bool :: !Bool -> Value -- | an integer Int :: {-# UNPACK #-} !Int64 -> Value -- | a floating point number Float :: {-# UNPACK #-} !Float -> Value -- | a floating point number Double :: {-# UNPACK #-} !Double -> Value -- | a UTF-8 string Str :: {-# UNPACK #-} !Text -> Value -- | a byte array Bin :: {-# UNPACK #-} !Bytes -> Value -- | a sequence of objects Array :: {-# UNPACK #-} !Vector Value -> Value -- | key-value pairs of objects Map :: {-# UNPACK #-} !Vector (Value, Value) -> Value Ext :: {-# UNPACK #-} !Word8 -> {-# UNPACK #-} !Bytes -> Value -- | nil Nil :: Value -- |
--   Settings T.pack T.pack False
--   
defaultSettings :: Settings -- | Generic encode/decode Settings data Settings Settings :: (String -> Text) -> (String -> Text) -> Bool -> Settings -- | format field labels [fieldFmt] :: Settings -> String -> Text -- | format constructor names [constrFmt] :: Settings -> String -> Text -- | take missing field as Nil? [missingKeyAsNil] :: Settings -> Bool snakeCase :: String -> Text trainCase :: String -> Text -- | Decode a MessagePack instance from file. readMessagePackFile :: (HasCallStack, MessagePack a) => CBytes -> IO a -- | Encode a MessagePack instance to file. writeMessagePackFile :: (HasCallStack, MessagePack a) => CBytes -> a -> IO () -- | Decode a MessagePack bytes, return any trailing bytes. decode :: MessagePack a => Bytes -> (Bytes, Either DecodeError a) -- | Decode a MessagePack doc, trailing bytes are not allowed. decode' :: MessagePack a => Bytes -> Either DecodeError a -- | Decode MessagePack doc chunks, return trailing bytes. decodeChunks :: (MessagePack a, Monad m) => m Bytes -> Bytes -> m (Bytes, Either DecodeError a) -- | Directly encode data to MessagePack bytes. encode :: MessagePack a => a -> Bytes -- | Encode data to MessagePack bytes chunks. encodeChunks :: MessagePack a => a -> [Bytes] type DecodeError = Either ParseError ConvertError type ParseError = [Text] -- | Parse Value without consuming trailing bytes. parseValue :: Bytes -> (Bytes, Either ParseError Value) -- | Parse Value, if there're bytes left, parsing will fail. parseValue' :: Bytes -> Either ParseError Value -- | Increamental parse Value without consuming trailing bytes. parseValueChunks :: Monad m => m Bytes -> Bytes -> m (Bytes, Either ParseError Value) -- | Increamental parse Value, if there're bytes left, parsing will -- fail. parseValueChunks' :: Monad m => m Bytes -> Bytes -> m (Either ParseError Value) gToValue :: GToValue f => Settings -> f a -> Value gFromValue :: GFromValue f => Settings -> Value -> Converter (f a) gEncodeMessagePack :: GEncodeMessagePack f => Settings -> f a -> Builder () -- | Run a Converter with input value. convertValue :: MessagePack a => Value -> Either ConvertError a newtype Converter a Converter :: (forall r. () => ([PathElement] -> Text -> r) -> (a -> r) -> r) -> Converter a [runConverter] :: Converter a -> forall r. () => ([PathElement] -> Text -> r) -> (a -> r) -> r fail' :: Text -> Converter a () :: Converter a -> PathElement -> Converter a prependContext :: Text -> Converter a -> Converter a data PathElement Key :: {-# UNPACK #-} !Text -> PathElement Index :: {-# UNPACK #-} !Int -> PathElement Embedded :: PathElement data ConvertError ConvertError :: [PathElement] -> Text -> ConvertError [errPath] :: ConvertError -> [PathElement] [errMsg] :: ConvertError -> Text -- | Produce an error message like converting XXX failed, expected XXX, -- encountered XXX. typeMismatch :: Text -> Text -> Value -> Converter a fromNil :: Text -> a -> Value -> Converter a withBool :: Text -> (Bool -> Converter a) -> Value -> Converter a withStr :: Text -> (Text -> Converter a) -> Value -> Converter a withBin :: Text -> (Bytes -> Converter a) -> Value -> Converter a withArray :: Text -> (Vector Value -> Converter a) -> Value -> Converter a -- | Directly use Map as key-values for further converting. withKeyValues :: Text -> (Vector (Value, Value) -> Converter a) -> Value -> Converter a -- | Take a Map as an 'FM.FlatMap Value Value', on key duplication -- prefer first one. withFlatMap :: Text -> (FlatMap Value Value -> Converter a) -> Value -> Converter a -- | Take a Map as an 'FM.FlatMap Value Value', on key duplication -- prefer last one. withFlatMapR :: Text -> (FlatMap Value Value -> Converter a) -> Value -> Converter a -- | Retrieve the value associated with the given key of an Map. The -- result is empty if the key is not present or the value cannot -- be converted to the desired type. -- -- This accessor is appropriate if the key and value must be -- present in an object for it to be valid. If the key and value are -- optional, use .:? instead. (.:) :: MessagePack a => FlatMap Value Value -> Text -> Converter a -- | Retrieve the value associated with the given key of an Map. The -- result is Nothing if the key is not present or if its value is -- Nil, or fail if the value cannot be converted to the desired -- type. -- -- This accessor is most useful if the key and value can be absent from -- an object without affecting its validity. If the key and value are -- mandatory, use .: instead. (.:?) :: MessagePack a => FlatMap Value Value -> Text -> Converter (Maybe a) -- | Retrieve the value associated with the given key of an Map. The -- result is Nothing if the key is not present or fail if the -- value cannot be converted to the desired type. -- -- This differs from .:? by attempting to convert Nil the -- same as any other MessagePack value, instead of interpreting it as -- Nothing. (.:!) :: MessagePack a => FlatMap Value Value -> Text -> Converter (Maybe a) convertField :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter a -- | Variant of .:? with explicit converter function. convertFieldMaybe :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter (Maybe a) -- | Variant of .:! with explicit converter function. convertFieldMaybe' :: (Value -> Converter a) -> FlatMap Value Value -> Text -> Converter (Maybe a) -- | Connect key and value to a tuple to be used with object. (.=) :: MessagePack v => Text -> v -> (Value, Value) infixr 8 .= -- | Alias for Map . pack. object :: [(Value, Value)] -> Value -- | Connect key and value to a KVItem using colon, key will -- be escaped. (.!) :: MessagePack v => Text -> v -> KVItem infixr 8 .! -- | Write map header and KVItems. object' :: KVItem -> Builder () -- | A newtype for Builder, whose semigroup's instance is to connect -- kv builder and sum kv length. data KVItem instance forall k k1 (f :: k -> *) (g :: k1 -> k) (a :: k1). Z.Data.MessagePack.Base.MessagePack (f (g a)) => Z.Data.MessagePack.Base.MessagePack (Data.Functor.Compose.Compose f g a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.Min a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.Max a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.First a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.Last a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.WrappedMonoid a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Semigroup.Internal.Dual a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Monoid.First a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Monoid.Last a) instance Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Functor.Identity.Identity a) instance forall k a (b :: k). Z.Data.MessagePack.Base.MessagePack a => Z.Data.MessagePack.Base.MessagePack (Data.Functor.Const.Const a b) instance forall k b (a :: k). Z.Data.MessagePack.Base.MessagePack b => Z.Data.MessagePack.Base.MessagePack (Data.Tagged.Tagged a b) instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CChar instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CSChar instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUChar instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CShort instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUShort instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CInt instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUInt instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CLong instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CULong instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CPtrdiff instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CSize instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CWchar instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CSigAtomic instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CLLong instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CULLong instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CBool instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CIntPtr instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUIntPtr instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CIntMax instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUIntMax instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CClock instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CTime instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CUSeconds instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CSUSeconds instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CFloat instance Z.Data.MessagePack.Base.MessagePack Foreign.C.Types.CDouble instance (Z.Data.MessagePack.Base.MessagePack (f a), Z.Data.MessagePack.Base.MessagePack (g a), Z.Data.MessagePack.Base.MessagePack a) => Z.Data.MessagePack.Base.MessagePack (Data.Functor.Sum.Sum f g a) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b) => Z.Data.MessagePack.Base.MessagePack (Data.Either.Either a b) instance forall k (f :: k -> *) (a :: k) (g :: k -> *). (Z.Data.MessagePack.Base.MessagePack (f a), Z.Data.MessagePack.Base.MessagePack (g a)) => Z.Data.MessagePack.Base.MessagePack (Data.Functor.Product.Product f g a) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b) => Z.Data.MessagePack.Base.MessagePack (a, b) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b, Z.Data.MessagePack.Base.MessagePack c) => Z.Data.MessagePack.Base.MessagePack (a, b, c) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b, Z.Data.MessagePack.Base.MessagePack c, Z.Data.MessagePack.Base.MessagePack d) => Z.Data.MessagePack.Base.MessagePack (a, b, c, d) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b, Z.Data.MessagePack.Base.MessagePack c, Z.Data.MessagePack.Base.MessagePack d, Z.Data.MessagePack.Base.MessagePack e) => Z.Data.MessagePack.Base.MessagePack (a, b, c, d, e) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b, Z.Data.MessagePack.Base.MessagePack c, Z.Data.MessagePack.Base.MessagePack d, Z.Data.MessagePack.Base.MessagePack e, Z.Data.MessagePack.Base.MessagePack f) => Z.Data.MessagePack.Base.MessagePack (a, b, c, d, e, f) instance (Z.Data.MessagePack.Base.MessagePack a, Z.Data.MessagePack.Base.MessagePack b, Z.Data.MessagePack.Base.MessagePack c, Z.Data.MessagePack.Base.MessagePack d, Z.Data.MessagePack.Base.MessagePack e, Z.Data.MessagePack.Base.MessagePack f, Z.Data.MessagePack.Base.MessagePack g) => Z.Data.MessagePack.Base.MessagePack (a, b, c, d, e, f, g) instance Z.Data.MessagePack.Base.MessagePack GHC.IO.Exception.ExitCode instance Z.Data.MessagePack.Base.MessagePack Data.Version.Version instance Z.Data.MessagePack.Base.MessagePack Data.Time.Clock.Internal.UTCTime.UTCTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.Clock.Internal.SystemTime.SystemTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.LocalTime.Internal.ZonedTime.ZonedTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.Calendar.Days.Day instance Z.Data.MessagePack.Base.MessagePack Data.Time.LocalTime.Internal.LocalTime.LocalTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.LocalTime.Internal.TimeOfDay.TimeOfDay instance Z.Data.MessagePack.Base.MessagePack Data.Time.Clock.Internal.NominalDiffTime.NominalDiffTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.Clock.Internal.DiffTime.DiffTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.LocalTime.Internal.CalendarDiffTime.CalendarDiffTime instance Z.Data.MessagePack.Base.MessagePack Data.Time.Calendar.CalendarDiffDays.CalendarDiffDays instance Z.Data.MessagePack.Base.MessagePack Data.Time.Calendar.Week.DayOfWeek -- | This module provides MessagePack-RPC implementation. -- --
--   -- server
--   import Z.IO.RPC.MessagePack
--   import Z.IO.Network
--   import Z.IO
--   import qualified Z.Data.Text as T
--   
--   serveRPC (startTCPServer defaultTCPServerConfig) . simpleRouter $
--    [ ("foo", CallHandler $ \ (req :: Int) -> do
--        return (req + 1))
--    , ("bar", NotifyHandler $ \ (req :: T.Text) -> do
--        printStd (req <> "world"))
--    ]
--   
--   -- client
--   import Z.IO.RPC.MessagePack
--   import Z.IO.Network
--   import Z.IO
--   import qualified Z.Data.Text as T
--   
--   withResource (initTCPClient defaultTCPClientConfig) $ \ uvs -> do
--       c <- rpcClient uvs
--       call @Int @Int c "foo" 1
--       notify @T.Text c "bar" "hello"
--   
module Z.IO.RPC.MessagePack data Client Client :: Counter -> Counter -> BufferedInput -> BufferedOutput -> Client [_clientSeqRef] :: Client -> Counter [_clientPipelineReqNum] :: Client -> Counter [_clientBufferedInput] :: Client -> BufferedInput [_clientBufferedOutput] :: Client -> BufferedOutput -- | Open a RPC client from input/output device. rpcClient :: (Input dev, Output dev) => dev -> IO Client -- | Open a RPC client with more control. rpcClient' :: (Input i, Output o) => i -> o -> Int -> Int -> IO Client -- | Send a single RPC call and get result. call :: (MessagePack req, MessagePack res) => Client -> Text -> req -> IO res -- | Send a single notification RPC call without getting result. notify :: MessagePack req => Client -> Text -> req -> IO () type PipelineId = Int type PipelineResult = FlatIntMap Value -- | Make a call inside a pipeline, which will be sent in batch when -- execPipeline. -- --
--   ...
--   fooId <- callPipeline client "foo" $ ...
--   barId <- callPipeline client "bar" $ ...
--   notifyPipeline client "qux" $ ...
--   
--   r <- execPipeline client
--   
--   fooResult <- fetchPipeline fooId r
--   barResult <- fetchPipeline barId r
--   
callPipeline :: HasCallStack => MessagePack req => Client -> Text -> req -> IO PipelineId -- | Make a notify inside a pipeline, which will be sent in batch when -- execPipeline. -- -- Notify calls doesn't affect execution's result. notifyPipeline :: HasCallStack => MessagePack req => Client -> Text -> req -> IO () -- | Exception thrown when remote endpoint return errors. data RPCException RPCException :: Value -> CallStack -> RPCException -- | Sent request in batch and get result in a map identified by -- PipelineId. execPipeline :: HasCallStack => Client -> IO PipelineResult -- | Use the PipelineId returned when callPipeline to fetch -- call's result. fetchPipeline :: HasCallStack => MessagePack res => PipelineId -> PipelineResult -> IO res type ServerLoop = (UVStream -> IO ()) -> IO () type ServerService = Text -> Maybe ServerHandler data ServerHandler [CallHandler] :: (MessagePack req, MessagePack res) => (req -> IO res) -> ServerHandler [NotifyHandler] :: MessagePack req => (req -> IO ()) -> ServerHandler -- | Simple router using FlatMap, lookup name in O(log(N)). -- --
--   import Z.IO.PRC.MessagePack
--   import Z.IO.Network
--   import Z.IO
--   
--   serveRPC (startTCPServer defaultTCPServerConfig) . simpleRouter $
--    [ ("foo", CallHandler $ \ req -> do
--        ... )
--    , ("bar", CallHandler $ \ req -> do
--        ... )
--    ]
--   
simpleRouter :: [(Text, ServerHandler)] -> ServerService -- | Serve a RPC service. serveRPC :: ServerLoop -> ServerService -> IO () -- | Serve a RPC service with more control. serveRPC' :: ServerLoop -> Int -> Int -> ServerService -> IO () instance GHC.Show.Show Z.IO.RPC.MessagePack.RPCException instance GHC.Exception.Type.Exception Z.IO.RPC.MessagePack.RPCException