{-# LANGUAGE CPP #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE IncoherentInstances #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE Trustworthy #-}
module Data.MessagePack.Types.Class
( MessagePack (..)
, GMessagePack (..)
, Config
, defaultConfig
) where
import Control.Applicative (Applicative, (<$>), (<*>))
import Control.Arrow ((***))
import Control.Monad.Validate (MonadValidate (..))
import qualified Data.ByteString as S
import qualified Data.ByteString.Lazy as L
import qualified Data.HashMap.Strict as HashMap
import Data.Hashable (Hashable)
import Data.Int (Int16, Int32, Int64, Int8)
import qualified Data.IntMap.Strict as IntMap
import qualified Data.Map as Map
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
import qualified Data.Vector as V
import qualified Data.Vector.Storable as VS
import qualified Data.Vector.Unboxed as VU
import Data.Word (Word, Word16, Word32,
Word64, Word8)
import GHC.Generics (Generic, Rep, from, to)
import Data.MessagePack.Types.Assoc (Assoc (..))
import Data.MessagePack.Types.DecodeError (DecodeError)
import Data.MessagePack.Types.Object (Object (..))
data Config = Config
defaultConfig :: Config
defaultConfig :: Config
defaultConfig = Config
Config
class GMessagePack f where
gToObject :: Config -> f a -> Object
gFromObject
:: ( Applicative m
, Monad m
, MonadValidate DecodeError m
)
=> Config
-> Object
-> m (f a)
class MessagePack a where
toObject :: Config -> a -> Object
fromObjectWith
:: ( Applicative m
, Monad m
, MonadValidate DecodeError m
)
=> Config
-> Object
-> m a
default toObject :: (Generic a, GMessagePack (Rep a)) => Config -> a -> Object
toObject = Config -> a -> Object
forall a.
(Generic a, GMessagePack (Rep a)) =>
Config -> a -> Object
genericToObject
default fromObjectWith
:: ( Applicative m
, Monad m
, MonadValidate DecodeError m
, Generic a, GMessagePack (Rep a))
=> Config
-> Object
-> m a
fromObjectWith = Config -> Object -> m a
forall (m :: * -> *) a.
(Applicative m, Monad m, MonadValidate DecodeError m, Generic a,
GMessagePack (Rep a)) =>
Config -> Object -> m a
genericFromObject
genericToObject :: (Generic a, GMessagePack (Rep a)) => Config -> a -> Object
genericToObject :: Config -> a -> Object
genericToObject Config
cfg = Config -> Rep a Any -> Object
forall (f :: * -> *) a. GMessagePack f => Config -> f a -> Object
gToObject Config
cfg (Rep a Any -> Object) -> (a -> Rep a Any) -> a -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a Any
forall a x. Generic a => a -> Rep a x
from
genericFromObject
:: ( Applicative m
, Monad m
, MonadValidate DecodeError m
, Generic a
, GMessagePack (Rep a)
)
=> Config
-> Object
-> m a
genericFromObject :: Config -> Object -> m a
genericFromObject Config
cfg Object
x = Rep a Any -> a
forall a x. Generic a => Rep a x -> a
to (Rep a Any -> a) -> m (Rep a Any) -> m a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m (Rep a Any)
forall (f :: * -> *) (m :: * -> *) a.
(GMessagePack f, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m (f a)
gFromObject Config
cfg Object
x
toInt :: Integral a => a -> Int64
toInt :: a -> Int64
toInt = a -> Int64
forall a b. (Integral a, Num b) => a -> b
fromIntegral
fromInt :: Integral a => Int64 -> a
fromInt :: Int64 -> a
fromInt = Int64 -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral
toWord :: Integral a => a -> Word64
toWord :: a -> Word64
toWord = a -> Word64
forall a b. (Integral a, Num b) => a -> b
fromIntegral
fromWord :: Integral a => Word64 -> a
fromWord :: Word64 -> a
fromWord = Word64 -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral
instance MessagePack Int64 where
toObject :: Config -> Int64 -> Object
toObject Config
_ Int64
i
| Int64
i Int64 -> Int64 -> Bool
forall a. Ord a => a -> a -> Bool
< Int64
0 = Int64 -> Object
ObjectInt Int64
i
| Bool
otherwise = Word64 -> Object
ObjectWord (Word64 -> Object) -> Word64 -> Object
forall a b. (a -> b) -> a -> b
$ Int64 -> Word64
forall a. Integral a => a -> Word64
toWord Int64
i
fromObjectWith :: Config -> Object -> m Int64
fromObjectWith Config
_ = \case
ObjectInt Int64
n -> Int64 -> m Int64
forall (m :: * -> *) a. Monad m => a -> m a
return Int64
n
ObjectWord Word64
n -> Int64 -> m Int64
forall (m :: * -> *) a. Monad m => a -> m a
return (Int64 -> m Int64) -> Int64 -> m Int64
forall a b. (a -> b) -> a -> b
$ Word64 -> Int64
forall a. Integral a => a -> Int64
toInt Word64
n
Object
_ -> DecodeError -> m Int64
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for integer type"
instance MessagePack Word64 where
toObject :: Config -> Word64 -> Object
toObject Config
_ = Word64 -> Object
ObjectWord
fromObjectWith :: Config -> Object -> m Word64
fromObjectWith Config
_ = \case
ObjectWord Word64
n -> Word64 -> m Word64
forall (m :: * -> *) a. Monad m => a -> m a
return Word64
n
Object
_ -> DecodeError -> m Word64
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for integer type"
instance MessagePack Int where { toObject :: Config -> Int -> Object
toObject Config
cfg = Config -> Int64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Int64 -> Object) -> (Int -> Int64) -> Int -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int64
forall a. Integral a => a -> Int64
toInt; fromObjectWith :: Config -> Object -> m Int
fromObjectWith Config
cfg Object
o = Int64 -> Int
forall a. Integral a => Int64 -> a
fromInt (Int64 -> Int) -> m Int64 -> m Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Int64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Int8 where { toObject :: Config -> Int8 -> Object
toObject Config
cfg = Config -> Int64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Int64 -> Object) -> (Int8 -> Int64) -> Int8 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> Int64
forall a. Integral a => a -> Int64
toInt; fromObjectWith :: Config -> Object -> m Int8
fromObjectWith Config
cfg Object
o = Int64 -> Int8
forall a. Integral a => Int64 -> a
fromInt (Int64 -> Int8) -> m Int64 -> m Int8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Int64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Int16 where { toObject :: Config -> Int16 -> Object
toObject Config
cfg = Config -> Int64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Int64 -> Object) -> (Int16 -> Int64) -> Int16 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int16 -> Int64
forall a. Integral a => a -> Int64
toInt; fromObjectWith :: Config -> Object -> m Int16
fromObjectWith Config
cfg Object
o = Int64 -> Int16
forall a. Integral a => Int64 -> a
fromInt (Int64 -> Int16) -> m Int64 -> m Int16
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Int64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Int32 where { toObject :: Config -> Int32 -> Object
toObject Config
cfg = Config -> Int64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Int64 -> Object) -> (Int32 -> Int64) -> Int32 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> Int64
forall a. Integral a => a -> Int64
toInt; fromObjectWith :: Config -> Object -> m Int32
fromObjectWith Config
cfg Object
o = Int64 -> Int32
forall a. Integral a => Int64 -> a
fromInt (Int64 -> Int32) -> m Int64 -> m Int32
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Int64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Word where { toObject :: Config -> Word -> Object
toObject Config
cfg = Config -> Word64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Word64 -> Object) -> (Word -> Word64) -> Word -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word -> Word64
forall a. Integral a => a -> Word64
toWord; fromObjectWith :: Config -> Object -> m Word
fromObjectWith Config
cfg Object
o = Word64 -> Word
forall a. Integral a => Word64 -> a
fromWord (Word64 -> Word) -> m Word64 -> m Word
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Word64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Word8 where { toObject :: Config -> Word8 -> Object
toObject Config
cfg = Config -> Word64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Word64 -> Object) -> (Word8 -> Word64) -> Word8 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word8 -> Word64
forall a. Integral a => a -> Word64
toWord; fromObjectWith :: Config -> Object -> m Word8
fromObjectWith Config
cfg Object
o = Word64 -> Word8
forall a. Integral a => Word64 -> a
fromWord (Word64 -> Word8) -> m Word64 -> m Word8
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Word64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Word16 where { toObject :: Config -> Word16 -> Object
toObject Config
cfg = Config -> Word64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Word64 -> Object) -> (Word16 -> Word64) -> Word16 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word16 -> Word64
forall a. Integral a => a -> Word64
toWord; fromObjectWith :: Config -> Object -> m Word16
fromObjectWith Config
cfg Object
o = Word64 -> Word16
forall a. Integral a => Word64 -> a
fromWord (Word64 -> Word16) -> m Word64 -> m Word16
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Word64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Word32 where { toObject :: Config -> Word32 -> Object
toObject Config
cfg = Config -> Word64 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Word64 -> Object) -> (Word32 -> Word64) -> Word32 -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> Word64
forall a. Integral a => a -> Word64
toWord; fromObjectWith :: Config -> Object -> m Word32
fromObjectWith Config
cfg Object
o = Word64 -> Word32
forall a. Integral a => Word64 -> a
fromWord (Word64 -> Word32) -> m Word64 -> m Word32
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Word64
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
o }
instance MessagePack Object where
toObject :: Config -> Object -> Object
toObject Config
_ = Object -> Object
forall a. a -> a
id
fromObjectWith :: Config -> Object -> m Object
fromObjectWith Config
_ = Object -> m Object
forall (m :: * -> *) a. Monad m => a -> m a
return
instance MessagePack () where
toObject :: Config -> () -> Object
toObject Config
_ ()
_ = Object
ObjectNil
fromObjectWith :: Config -> Object -> m ()
fromObjectWith Config
_ = \case
Object
ObjectNil -> () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
ObjectArray [] -> () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
Object
_ -> DecodeError -> m ()
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for ()"
instance MessagePack Bool where
toObject :: Config -> Bool -> Object
toObject Config
_ = Bool -> Object
ObjectBool
fromObjectWith :: Config -> Object -> m Bool
fromObjectWith Config
_ = \case
ObjectBool Bool
b -> Bool -> m Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
b
Object
_ -> DecodeError -> m Bool
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Bool"
instance MessagePack Float where
toObject :: Config -> Float -> Object
toObject Config
_ = Float -> Object
ObjectFloat
fromObjectWith :: Config -> Object -> m Float
fromObjectWith Config
_ = \case
ObjectInt Int64
n -> Float -> m Float
forall (m :: * -> *) a. Monad m => a -> m a
return (Float -> m Float) -> Float -> m Float
forall a b. (a -> b) -> a -> b
$ Int64 -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
n
ObjectWord Word64
n -> Float -> m Float
forall (m :: * -> *) a. Monad m => a -> m a
return (Float -> m Float) -> Float -> m Float
forall a b. (a -> b) -> a -> b
$ Word64 -> Float
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
n
ObjectFloat Float
f -> Float -> m Float
forall (m :: * -> *) a. Monad m => a -> m a
return Float
f
ObjectDouble Double
d -> Float -> m Float
forall (m :: * -> *) a. Monad m => a -> m a
return (Float -> m Float) -> Float -> m Float
forall a b. (a -> b) -> a -> b
$ Double -> Float
forall a b. (Real a, Fractional b) => a -> b
realToFrac Double
d
Object
_ -> DecodeError -> m Float
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Float"
instance MessagePack Double where
toObject :: Config -> Double -> Object
toObject Config
_ = Double -> Object
ObjectDouble
fromObjectWith :: Config -> Object -> m Double
fromObjectWith Config
_ = \case
ObjectInt Int64
n -> Double -> m Double
forall (m :: * -> *) a. Monad m => a -> m a
return (Double -> m Double) -> Double -> m Double
forall a b. (a -> b) -> a -> b
$ Int64 -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int64
n
ObjectWord Word64
n -> Double -> m Double
forall (m :: * -> *) a. Monad m => a -> m a
return (Double -> m Double) -> Double -> m Double
forall a b. (a -> b) -> a -> b
$ Word64 -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word64
n
ObjectFloat Float
f -> Double -> m Double
forall (m :: * -> *) a. Monad m => a -> m a
return (Double -> m Double) -> Double -> m Double
forall a b. (a -> b) -> a -> b
$ Float -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac Float
f
ObjectDouble Double
d -> Double -> m Double
forall (m :: * -> *) a. Monad m => a -> m a
return Double
d
Object
_ -> DecodeError -> m Double
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Double"
instance MessagePack String where
toObject :: Config -> String -> Object
toObject Config
cfg = Config -> Text -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Text -> Object) -> (String -> Text) -> String -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack
fromObjectWith :: Config -> Object -> m String
fromObjectWith Config
cfg Object
obj = Text -> String
T.unpack (Text -> String) -> m Text -> m String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Text
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance MessagePack S.ByteString where
toObject :: Config -> ByteString -> Object
toObject Config
_ = ByteString -> Object
ObjectBin
fromObjectWith :: Config -> Object -> m ByteString
fromObjectWith Config
_ = \case
ObjectBin ByteString
r -> ByteString -> m ByteString
forall (m :: * -> *) a. Monad m => a -> m a
return ByteString
r
Object
_ -> DecodeError -> m ByteString
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for ByteString"
instance MessagePack L.ByteString where
toObject :: Config -> ByteString -> Object
toObject Config
_ = ByteString -> Object
ObjectBin (ByteString -> Object)
-> (ByteString -> ByteString) -> ByteString -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
L.toStrict
fromObjectWith :: Config -> Object -> m ByteString
fromObjectWith Config
cfg Object
obj = ByteString -> ByteString
L.fromStrict (ByteString -> ByteString) -> m ByteString -> m ByteString
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m ByteString
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance MessagePack T.Text where
toObject :: Config -> Text -> Object
toObject Config
_ = Text -> Object
ObjectStr
fromObjectWith :: Config -> Object -> m Text
fromObjectWith Config
_ = \case
ObjectStr Text
s -> Text -> m Text
forall (m :: * -> *) a. Monad m => a -> m a
return Text
s
Object
_ -> DecodeError -> m Text
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Text"
instance MessagePack LT.Text where
toObject :: Config -> Text -> Object
toObject Config
cfg = Config -> Text -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Text -> Object) -> (Text -> Text) -> Text -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> Text
LT.toStrict
fromObjectWith :: Config -> Object -> m Text
fromObjectWith Config
cfg Object
obj = Text -> Text
LT.fromStrict (Text -> Text) -> m Text -> m Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m Text
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance MessagePack a => MessagePack [a] where
toObject :: Config -> [a] -> Object
toObject Config
cfg = [Object] -> Object
ObjectArray ([Object] -> Object) -> ([a] -> [Object]) -> [a] -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Object) -> [a] -> [Object]
forall a b. (a -> b) -> [a] -> [b]
map (Config -> a -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg)
fromObjectWith :: Config -> Object -> m [a]
fromObjectWith Config
cfg = \case
ObjectArray [Object]
xs -> (Object -> m a) -> [Object] -> m [a]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Config -> Object -> m a
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg) [Object]
xs
Object
_ -> DecodeError -> m [a]
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for list"
instance MessagePack a => MessagePack (V.Vector a) where
toObject :: Config -> Vector a -> Object
toObject Config
cfg = [Object] -> Object
ObjectArray ([Object] -> Object)
-> (Vector a -> [Object]) -> Vector a -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Object) -> [a] -> [Object]
forall a b. (a -> b) -> [a] -> [b]
map (Config -> a -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg) ([a] -> [Object]) -> (Vector a -> [a]) -> Vector a -> [Object]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector a -> [a]
forall a. Vector a -> [a]
V.toList
fromObjectWith :: Config -> Object -> m (Vector a)
fromObjectWith Config
cfg = \case
ObjectArray [Object]
o -> [a] -> Vector a
forall a. [a] -> Vector a
V.fromList ([a] -> Vector a) -> m [a] -> m (Vector a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object -> m a) -> [Object] -> m [a]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Config -> Object -> m a
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg) [Object]
o
Object
_ -> DecodeError -> m (Vector a)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Vector"
instance (MessagePack a, VU.Unbox a) => MessagePack (VU.Vector a) where
toObject :: Config -> Vector a -> Object
toObject Config
cfg = [Object] -> Object
ObjectArray ([Object] -> Object)
-> (Vector a -> [Object]) -> Vector a -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Object) -> [a] -> [Object]
forall a b. (a -> b) -> [a] -> [b]
map (Config -> a -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg) ([a] -> [Object]) -> (Vector a -> [a]) -> Vector a -> [Object]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector a -> [a]
forall a. Unbox a => Vector a -> [a]
VU.toList
fromObjectWith :: Config -> Object -> m (Vector a)
fromObjectWith Config
cfg = \case
ObjectArray [Object]
o -> [a] -> Vector a
forall a. Unbox a => [a] -> Vector a
VU.fromList ([a] -> Vector a) -> m [a] -> m (Vector a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object -> m a) -> [Object] -> m [a]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Config -> Object -> m a
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg) [Object]
o
Object
_ -> DecodeError -> m (Vector a)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Unboxed Vector"
instance (MessagePack a, VS.Storable a) => MessagePack (VS.Vector a) where
toObject :: Config -> Vector a -> Object
toObject Config
cfg = [Object] -> Object
ObjectArray ([Object] -> Object)
-> (Vector a -> [Object]) -> Vector a -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> Object) -> [a] -> [Object]
forall a b. (a -> b) -> [a] -> [b]
map (Config -> a -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg) ([a] -> [Object]) -> (Vector a -> [a]) -> Vector a -> [Object]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector a -> [a]
forall a. Storable a => Vector a -> [a]
VS.toList
fromObjectWith :: Config -> Object -> m (Vector a)
fromObjectWith Config
cfg = \case
ObjectArray [Object]
o -> [a] -> Vector a
forall a. Storable a => [a] -> Vector a
VS.fromList ([a] -> Vector a) -> m [a] -> m (Vector a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Object -> m a) -> [Object] -> m [a]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Config -> Object -> m a
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg) [Object]
o
Object
_ -> DecodeError -> m (Vector a)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Storable Vector"
instance (MessagePack a, MessagePack b) => MessagePack (Assoc [(a, b)]) where
toObject :: Config -> Assoc [(a, b)] -> Object
toObject Config
cfg (Assoc [(a, b)]
xs) = [(Object, Object)] -> Object
ObjectMap ([(Object, Object)] -> Object) -> [(Object, Object)] -> Object
forall a b. (a -> b) -> a -> b
$ ((a, b) -> (Object, Object)) -> [(a, b)] -> [(Object, Object)]
forall a b. (a -> b) -> [a] -> [b]
map (Config -> a -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (a -> Object) -> (b -> Object) -> (a, b) -> (Object, Object)
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** Config -> b -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg) [(a, b)]
xs
fromObjectWith :: Config -> Object -> m (Assoc [(a, b)])
fromObjectWith Config
cfg = \case
ObjectMap [(Object, Object)]
xs ->
[(a, b)] -> Assoc [(a, b)]
forall a. a -> Assoc a
Assoc ([(a, b)] -> Assoc [(a, b)]) -> m [(a, b)] -> m (Assoc [(a, b)])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((Object, Object) -> m (a, b)) -> [(Object, Object)] -> m [(a, b)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (\(Object
k, Object
v) -> (,) (a -> b -> (a, b)) -> m a -> m (b -> (a, b))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
k m (b -> (a, b)) -> m b -> m (a, b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m b
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
v) [(Object, Object)]
xs
Object
_ -> DecodeError -> m (Assoc [(a, b)])
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for Assoc"
instance (MessagePack k, MessagePack v, Ord k) => MessagePack (Map.Map k v) where
toObject :: Config -> Map k v -> Object
toObject Config
cfg = Config -> Assoc [(k, v)] -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Assoc [(k, v)] -> Object)
-> (Map k v -> Assoc [(k, v)]) -> Map k v -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(k, v)] -> Assoc [(k, v)]
forall a. a -> Assoc a
Assoc ([(k, v)] -> Assoc [(k, v)])
-> (Map k v -> [(k, v)]) -> Map k v -> Assoc [(k, v)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k v -> [(k, v)]
forall k a. Map k a -> [(k, a)]
Map.toList
fromObjectWith :: Config -> Object -> m (Map k v)
fromObjectWith Config
cfg Object
obj = [(k, v)] -> Map k v
forall k a. Ord k => [(k, a)] -> Map k a
Map.fromList ([(k, v)] -> Map k v)
-> (Assoc [(k, v)] -> [(k, v)]) -> Assoc [(k, v)] -> Map k v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Assoc [(k, v)] -> [(k, v)]
forall a. Assoc a -> a
unAssoc (Assoc [(k, v)] -> Map k v) -> m (Assoc [(k, v)]) -> m (Map k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m (Assoc [(k, v)])
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance MessagePack v => MessagePack (IntMap.IntMap v) where
toObject :: Config -> IntMap v -> Object
toObject Config
cfg = Config -> Assoc [(Int, v)] -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Assoc [(Int, v)] -> Object)
-> (IntMap v -> Assoc [(Int, v)]) -> IntMap v -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(Int, v)] -> Assoc [(Int, v)]
forall a. a -> Assoc a
Assoc ([(Int, v)] -> Assoc [(Int, v)])
-> (IntMap v -> [(Int, v)]) -> IntMap v -> Assoc [(Int, v)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. IntMap v -> [(Int, v)]
forall a. IntMap a -> [(Int, a)]
IntMap.toList
fromObjectWith :: Config -> Object -> m (IntMap v)
fromObjectWith Config
cfg Object
obj = [(Int, v)] -> IntMap v
forall a. [(Int, a)] -> IntMap a
IntMap.fromList ([(Int, v)] -> IntMap v)
-> (Assoc [(Int, v)] -> [(Int, v)]) -> Assoc [(Int, v)] -> IntMap v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Assoc [(Int, v)] -> [(Int, v)]
forall a. Assoc a -> a
unAssoc (Assoc [(Int, v)] -> IntMap v)
-> m (Assoc [(Int, v)]) -> m (IntMap v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m (Assoc [(Int, v)])
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance (MessagePack k, MessagePack v, Hashable k, Eq k) => MessagePack (HashMap.HashMap k v) where
toObject :: Config -> HashMap k v -> Object
toObject Config
cfg = Config -> Assoc [(k, v)] -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg (Assoc [(k, v)] -> Object)
-> (HashMap k v -> Assoc [(k, v)]) -> HashMap k v -> Object
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(k, v)] -> Assoc [(k, v)]
forall a. a -> Assoc a
Assoc ([(k, v)] -> Assoc [(k, v)])
-> (HashMap k v -> [(k, v)]) -> HashMap k v -> Assoc [(k, v)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashMap k v -> [(k, v)]
forall k v. HashMap k v -> [(k, v)]
HashMap.toList
fromObjectWith :: Config -> Object -> m (HashMap k v)
fromObjectWith Config
cfg Object
obj = [(k, v)] -> HashMap k v
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HashMap.fromList ([(k, v)] -> HashMap k v)
-> (Assoc [(k, v)] -> [(k, v)]) -> Assoc [(k, v)] -> HashMap k v
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Assoc [(k, v)] -> [(k, v)]
forall a. Assoc a -> a
unAssoc (Assoc [(k, v)] -> HashMap k v)
-> m (Assoc [(k, v)]) -> m (HashMap k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m (Assoc [(k, v)])
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
obj
instance (MessagePack a1, MessagePack a2) => MessagePack (a1, a2) where
toObject :: Config -> (a1, a2) -> Object
toObject Config
cfg (a1
a1, a2
a2) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2]
fromObjectWith :: Config -> Object -> m (a1, a2)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2]) = (,) (a1 -> a2 -> (a1, a2)) -> m a1 -> m (a2 -> (a1, a2))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2 -> (a1, a2)) -> m a2 -> m (a1, a2)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3) => MessagePack (a1, a2, a3) where
toObject :: Config -> (a1, a2, a3) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3]
fromObjectWith :: Config -> Object -> m (a1, a2, a3)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3]) = (,,) (a1 -> a2 -> a3 -> (a1, a2, a3))
-> m a1 -> m (a2 -> a3 -> (a1, a2, a3))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2 -> a3 -> (a1, a2, a3)) -> m a2 -> m (a3 -> (a1, a2, a3))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3 -> (a1, a2, a3)) -> m a3 -> m (a1, a2, a3)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4) => MessagePack (a1, a2, a3, a4) where
toObject :: Config -> (a1, a2, a3, a4) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4]) = (,,,) (a1 -> a2 -> a3 -> a4 -> (a1, a2, a3, a4))
-> m a1 -> m (a2 -> a3 -> a4 -> (a1, a2, a3, a4))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2 -> a3 -> a4 -> (a1, a2, a3, a4))
-> m a2 -> m (a3 -> a4 -> (a1, a2, a3, a4))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3 -> a4 -> (a1, a2, a3, a4))
-> m a3 -> m (a4 -> (a1, a2, a3, a4))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4 -> (a1, a2, a3, a4)) -> m a4 -> m (a1, a2, a3, a4)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4, MessagePack a5) => MessagePack (a1, a2, a3, a4, a5) where
toObject :: Config -> (a1, a2, a3, a4, a5) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4, a5
a5) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4, Config -> a5 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a5
a5]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4, a5)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4, Object
a5]) = (,,,,) (a1 -> a2 -> a3 -> a4 -> a5 -> (a1, a2, a3, a4, a5))
-> m a1 -> m (a2 -> a3 -> a4 -> a5 -> (a1, a2, a3, a4, a5))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2 -> a3 -> a4 -> a5 -> (a1, a2, a3, a4, a5))
-> m a2 -> m (a3 -> a4 -> a5 -> (a1, a2, a3, a4, a5))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3 -> a4 -> a5 -> (a1, a2, a3, a4, a5))
-> m a3 -> m (a4 -> a5 -> (a1, a2, a3, a4, a5))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4 -> a5 -> (a1, a2, a3, a4, a5))
-> m a4 -> m (a5 -> (a1, a2, a3, a4, a5))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4 m (a5 -> (a1, a2, a3, a4, a5)) -> m a5 -> m (a1, a2, a3, a4, a5)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a5
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a5
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4, a5)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4, MessagePack a5, MessagePack a6) => MessagePack (a1, a2, a3, a4, a5, a6) where
toObject :: Config -> (a1, a2, a3, a4, a5, a6) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4, a5
a5, a6
a6) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4, Config -> a5 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a5
a5, Config -> a6 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a6
a6]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4, a5, a6)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4, Object
a5, Object
a6]) = (,,,,,) (a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
-> m a1
-> m (a2 -> a3 -> a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2 -> a3 -> a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
-> m a2 -> m (a3 -> a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3 -> a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
-> m a3 -> m (a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4 -> a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
-> m a4 -> m (a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4 m (a5 -> a6 -> (a1, a2, a3, a4, a5, a6))
-> m a5 -> m (a6 -> (a1, a2, a3, a4, a5, a6))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a5
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a5 m (a6 -> (a1, a2, a3, a4, a5, a6))
-> m a6 -> m (a1, a2, a3, a4, a5, a6)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a6
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a6
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4, a5, a6)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4, MessagePack a5, MessagePack a6, MessagePack a7) => MessagePack (a1, a2, a3, a4, a5, a6, a7) where
toObject :: Config -> (a1, a2, a3, a4, a5, a6, a7) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4, a5
a5, a6
a6, a7
a7) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4, Config -> a5 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a5
a5, Config -> a6 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a6
a6, Config -> a7 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a7
a7]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4, a5, a6, a7)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4, Object
a5, Object
a6, Object
a7]) = (,,,,,,) (a1
-> a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> (a1, a2, a3, a4, a5, a6, a7))
-> m a1
-> m (a2
-> a3 -> a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2
-> a3 -> a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a2
-> m (a3 -> a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3 -> a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a3 -> m (a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4 -> a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a4 -> m (a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4 m (a5 -> a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a5 -> m (a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a5
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a5 m (a6 -> a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a6 -> m (a7 -> (a1, a2, a3, a4, a5, a6, a7))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a6
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a6 m (a7 -> (a1, a2, a3, a4, a5, a6, a7))
-> m a7 -> m (a1, a2, a3, a4, a5, a6, a7)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a7
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a7
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4, a5, a6, a7)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4, MessagePack a5, MessagePack a6, MessagePack a7, MessagePack a8) => MessagePack (a1, a2, a3, a4, a5, a6, a7, a8) where
toObject :: Config -> (a1, a2, a3, a4, a5, a6, a7, a8) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4, a5
a5, a6
a6, a7
a7, a8
a8) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4, Config -> a5 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a5
a5, Config -> a6 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a6
a6, Config -> a7 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a7
a7, Config -> a8 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a8
a8]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4, a5, a6, a7, a8)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4, Object
a5, Object
a6, Object
a7, Object
a8]) = (,,,,,,,) (a1
-> a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a1
-> m (a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a2
-> m (a3
-> a4 -> a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3
-> a4 -> a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a3
-> m (a4
-> a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4 -> a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a4
-> m (a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4 m (a5 -> a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a5 -> m (a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a5
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a5 m (a6 -> a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a6 -> m (a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a6
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a6 m (a7 -> a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a7 -> m (a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a7
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a7 m (a8 -> (a1, a2, a3, a4, a5, a6, a7, a8))
-> m a8 -> m (a1, a2, a3, a4, a5, a6, a7, a8)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a8
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a8
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4, a5, a6, a7, a8)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"
instance (MessagePack a1, MessagePack a2, MessagePack a3, MessagePack a4, MessagePack a5, MessagePack a6, MessagePack a7, MessagePack a8, MessagePack a9) => MessagePack (a1, a2, a3, a4, a5, a6, a7, a8, a9) where
toObject :: Config -> (a1, a2, a3, a4, a5, a6, a7, a8, a9) -> Object
toObject Config
cfg (a1
a1, a2
a2, a3
a3, a4
a4, a5
a5, a6
a6, a7
a7, a8
a8, a9
a9) = [Object] -> Object
ObjectArray [Config -> a1 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a1
a1, Config -> a2 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a2
a2, Config -> a3 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a3
a3, Config -> a4 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a4
a4, Config -> a5 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a5
a5, Config -> a6 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a6
a6, Config -> a7 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a7
a7, Config -> a8 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a8
a8, Config -> a9 -> Object
forall a. MessagePack a => Config -> a -> Object
toObject Config
cfg a9
a9]
fromObjectWith :: Config -> Object -> m (a1, a2, a3, a4, a5, a6, a7, a8, a9)
fromObjectWith Config
cfg (ObjectArray [Object
a1, Object
a2, Object
a3, Object
a4, Object
a5, Object
a6, Object
a7, Object
a8, Object
a9]) = (,,,,,,,,) (a1
-> a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a1
-> m (a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Config -> Object -> m a1
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a1 m (a2
-> a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a2
-> m (a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a2
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a2 m (a3
-> a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a3
-> m (a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a3
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a3 m (a4
-> a5
-> a6
-> a7
-> a8
-> a9
-> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a4
-> m (a5
-> a6 -> a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a4
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a4 m (a5
-> a6 -> a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a5
-> m (a6 -> a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a5
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a5 m (a6 -> a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a6
-> m (a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a6
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a6 m (a7 -> a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a7 -> m (a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a7
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a7 m (a8 -> a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a8 -> m (a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a8
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a8 m (a9 -> (a1, a2, a3, a4, a5, a6, a7, a8, a9))
-> m a9 -> m (a1, a2, a3, a4, a5, a6, a7, a8, a9)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Config -> Object -> m a9
forall a (m :: * -> *).
(MessagePack a, Applicative m, Monad m,
MonadValidate DecodeError m) =>
Config -> Object -> m a
fromObjectWith Config
cfg Object
a9
fromObjectWith Config
_ Object
_ = DecodeError -> m (a1, a2, a3, a4, a5, a6, a7, a8, a9)
forall e (m :: * -> *) a. MonadValidate e m => e -> m a
refute DecodeError
"invalid encoding for tuple"