{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}

module Data.SerDoc.Binary.Codec
where

import Data.SerDoc.Class as SerDoc
import Data.SerDoc.Info

import qualified Data.Binary as B
import qualified Data.Binary.Put as B
import Data.ByteString (ByteString)
import qualified Data.ByteString.Lazy as LBS
import Data.ByteString.Short (ShortByteString)
import Data.Int
import Data.List
import Data.Proxy
import Data.Word
import Numeric.Natural

data BinaryCodec

instance Codec BinaryCodec where
  type MonadEncode BinaryCodec = B.PutM
  type MonadDecode BinaryCodec = B.Get

newtype ViaBinary a = ViaBinary { forall a. ViaBinary a -> a
viaBinary :: a }

instance B.Binary a => Serializable BinaryCodec (ViaBinary a) where
  encode :: Proxy BinaryCodec -> ViaBinary a -> MonadEncode BinaryCodec ()
encode Proxy BinaryCodec
_ = a -> Put
forall t. Binary t => t -> Put
B.put (a -> Put) -> (ViaBinary a -> a) -> ViaBinary a -> Put
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ViaBinary a -> a
forall a. ViaBinary a -> a
viaBinary
  decode :: Proxy BinaryCodec -> MonadDecode BinaryCodec (ViaBinary a)
decode Proxy BinaryCodec
_ = a -> ViaBinary a
forall a. a -> ViaBinary a
ViaBinary (a -> ViaBinary a) -> Get a -> Get (ViaBinary a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get a
forall t. Binary t => Get t
B.get

instance HasInfo BinaryCodec () where
  info :: Proxy BinaryCodec -> Proxy () -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy ()
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"()" (Int -> FieldSize
FixedSize Int
0)

deriving via (ViaBinary ()) instance Serializable BinaryCodec ()

instance HasInfo BinaryCodec Bool where
  info :: Proxy BinaryCodec -> Proxy Bool -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy Bool
p = Proxy BinaryCodec
-> Proxy Bool -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a n.
(Typeable a, Show a, Enum a, Bounded a, Codec codec,
 HasInfo codec n, HasInfo codec (DefEnumEncoding codec)) =>
Proxy codec -> Proxy a -> Proxy n -> FieldInfo codec
enumInfo Proxy BinaryCodec
codec Proxy Bool
p (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Word8)

deriving via (ViaBinary Bool) instance Serializable BinaryCodec Bool

instance HasInfo BinaryCodec Ordering where
  info :: Proxy BinaryCodec -> Proxy Ordering -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy Ordering
p = Proxy BinaryCodec
-> Proxy Ordering -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a n.
(Typeable a, Show a, Enum a, Bounded a, Codec codec,
 HasInfo codec n, HasInfo codec (DefEnumEncoding codec)) =>
Proxy codec -> Proxy a -> Proxy n -> FieldInfo codec
enumInfo Proxy BinaryCodec
codec Proxy Ordering
p (forall t. Proxy t
forall {k} (t :: k). Proxy t
Proxy @Word8)

deriving via (ViaBinary Ordering) instance Serializable BinaryCodec Ordering

instance HasInfo BinaryCodec Word8 where
  info :: Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Word8
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Word8" (Int -> FieldSize
FixedSize Int
1)

deriving via (ViaBinary Word8) instance Serializable BinaryCodec Word8

instance HasInfo BinaryCodec Word16 where
  info :: Proxy BinaryCodec -> Proxy Word16 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Word16
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Word16BE" (Int -> FieldSize
FixedSize Int
2)

deriving via (ViaBinary Word16) instance Serializable BinaryCodec Word16

instance HasInfo BinaryCodec Word32 where
  info :: Proxy BinaryCodec -> Proxy Word32 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Word32
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Word32BE" (Int -> FieldSize
FixedSize Int
4)

deriving via (ViaBinary Word32) instance Serializable BinaryCodec Word32

instance HasInfo BinaryCodec Word64 where
  info :: Proxy BinaryCodec -> Proxy Word64 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Word64
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Word64BE" (Int -> FieldSize
FixedSize Int
8)

deriving via (ViaBinary Word64) instance Serializable BinaryCodec Word64

instance HasInfo BinaryCodec Word where
  info :: Proxy BinaryCodec -> Proxy Word -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Word
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Word64BE" (Int -> FieldSize
FixedSize Int
8)

deriving via (ViaBinary Word) instance Serializable BinaryCodec Word

instance HasInfo BinaryCodec Int8 where
  info :: Proxy BinaryCodec -> Proxy Int8 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Int8
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Int8" (Int -> FieldSize
FixedSize Int
1)

deriving via (ViaBinary Int8) instance Serializable BinaryCodec Int8

instance HasInfo BinaryCodec Int16 where
  info :: Proxy BinaryCodec -> Proxy Int16 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Int16
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Int16BE" (Int -> FieldSize
FixedSize Int
2)

deriving via (ViaBinary Int16) instance Serializable BinaryCodec Int16

instance HasInfo BinaryCodec Int32 where
  info :: Proxy BinaryCodec -> Proxy Int32 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Int32
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Int32BE" (Int -> FieldSize
FixedSize Int
4)

deriving via (ViaBinary Int32) instance Serializable BinaryCodec Int32

instance HasInfo BinaryCodec Int64 where
  info :: Proxy BinaryCodec -> Proxy Int64 -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Int64
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Int64BE" (Int -> FieldSize
FixedSize Int
8)

deriving via (ViaBinary Int64) instance Serializable BinaryCodec Int64

instance HasInfo BinaryCodec Int where
  info :: Proxy BinaryCodec -> Proxy Int -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Int
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Int64BE" (Int -> FieldSize
FixedSize Int
8)

deriving via (ViaBinary Int) instance Serializable BinaryCodec Int

instance HasInfo BinaryCodec Float where
  info :: Proxy BinaryCodec -> Proxy Float -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Float
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Float" FieldSize
UnknownSize

deriving via (ViaBinary Float) instance Serializable BinaryCodec Float

instance HasInfo BinaryCodec Double where
  info :: Proxy BinaryCodec -> Proxy Double -> FieldInfo BinaryCodec
info Proxy BinaryCodec
_ Proxy Double
_ = String -> FieldSize -> FieldInfo BinaryCodec
forall codec. String -> FieldSize -> FieldInfo codec
basicField String
"Double" FieldSize
UnknownSize

deriving via (ViaBinary Double) instance Serializable BinaryCodec Double

instance HasInfo BinaryCodec Integer where
  info :: Proxy BinaryCodec -> Proxy Integer -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy Integer
_ =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"Integer"
      [ (String
"big", Proxy BinaryCodec -> Proxy Bool -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Bool
forall {k} (t :: k). Proxy t
Proxy :: Proxy Bool))
      , (String
"data",
          ChoiceCondition -> [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec.
ChoiceCondition -> [FieldInfo codec] -> FieldInfo codec
choiceField
            (String -> ChoiceCondition
IndexField String
"big")
            [ Proxy BinaryCodec -> Proxy Int32 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Int32
forall {k} (t :: k). Proxy t
Proxy :: Proxy Int32)
            , String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"BigInteger"
                [ (String
"sign", Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8))
                , (String
"dataBytes", Proxy BinaryCodec -> Proxy [Word8] -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy [Word8]
forall {k} (t :: k). Proxy t
Proxy :: Proxy [Word8]))
                ]
            ]
        )
      ]

deriving via (ViaBinary Integer) instance Serializable BinaryCodec Integer

instance HasInfo BinaryCodec Natural where
  info :: Proxy BinaryCodec -> Proxy Natural -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy Natural
_ =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"Natural"
      [ (String
"big", Proxy BinaryCodec -> Proxy Bool -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Bool
forall {k} (t :: k). Proxy t
Proxy :: Proxy Bool))
      , (String
"data",
          ChoiceCondition -> [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec.
ChoiceCondition -> [FieldInfo codec] -> FieldInfo codec
choiceField
            (String -> ChoiceCondition
IndexField String
"big")
            [ Proxy BinaryCodec -> Proxy Word64 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word64
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word64)
            , Proxy BinaryCodec -> Proxy [Word8] -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy [Word8]
forall {k} (t :: k). Proxy t
Proxy :: Proxy [Word8])
            ]
        )
      ]

deriving via (ViaBinary Natural) instance Serializable BinaryCodec Natural

instance HasInfo BinaryCodec a => HasInfo BinaryCodec [a] where
  info :: Proxy BinaryCodec -> Proxy [a] -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy [a]
_ :: Proxy [a]) =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"List"
      [ (String
"length", Proxy BinaryCodec -> Proxy Int -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Int
forall {k} (t :: k). Proxy t
Proxy :: Proxy Int))
      , (String
"items", FieldSize -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. FieldSize -> FieldInfo codec -> FieldInfo codec
listField (String -> FieldSize
VarSize String
"length") (Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)))
      ]
deriving via (ViaBinary [a]) instance B.Binary a => Serializable BinaryCodec [a]

instance HasInfo BinaryCodec a => HasInfo BinaryCodec (Maybe a) where
  info :: Proxy BinaryCodec -> Proxy (Maybe a) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (Maybe a)
_ :: Proxy (Maybe a)) =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"Maybe"
      [ (String
"isJust", Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8))
      , (String
"value",
            ChoiceCondition -> [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec.
ChoiceCondition -> [FieldInfo codec] -> FieldInfo codec
choiceField
              (String -> ChoiceCondition
IndexField String
"isJust")
              [ String -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. String -> FieldInfo codec -> FieldInfo codec
AnnField String
"Nothing" (FieldInfo BinaryCodec -> FieldInfo BinaryCodec)
-> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall a b. (a -> b) -> a -> b
$ Proxy BinaryCodec -> Proxy () -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy ()
forall {k} (t :: k). Proxy t
Proxy :: Proxy ())
              , String -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. String -> FieldInfo codec -> FieldInfo codec
AnnField String
"Just" (FieldInfo BinaryCodec -> FieldInfo BinaryCodec)
-> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall a b. (a -> b) -> a -> b
$ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
              ]
        )
      ]
deriving via (ViaBinary (Maybe a)) instance B.Binary a => Serializable BinaryCodec (Maybe a)

instance (HasInfo BinaryCodec a, HasInfo BinaryCodec b)
         => HasInfo BinaryCodec (Either a b)
         where
  info :: Proxy BinaryCodec -> Proxy (Either a b) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (Either a b)
_ :: Proxy (Either a b)) =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"Either"
      [ (String
"constructor", Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8))
      , (String
"value",
            ChoiceCondition -> [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec.
ChoiceCondition -> [FieldInfo codec] -> FieldInfo codec
choiceField
              (String -> ChoiceCondition
IndexField String
"constructor")
              [ String -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. String -> FieldInfo codec -> FieldInfo codec
AnnField String
"Left" (FieldInfo BinaryCodec -> FieldInfo BinaryCodec)
-> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall a b. (a -> b) -> a -> b
$ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
              , String -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. String -> FieldInfo codec -> FieldInfo codec
AnnField String
"Right" (FieldInfo BinaryCodec -> FieldInfo BinaryCodec)
-> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall a b. (a -> b) -> a -> b
$ Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
              ]
        )
      ]

deriving via (ViaBinary (Either a b)) instance (B.Binary a, B.Binary b)
         => Serializable BinaryCodec (Either a b)

tupleInfo :: [FieldInfo codec] -> FieldInfo codec
tupleInfo :: forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo [FieldInfo codec]
fieldInfos =
  String -> [(String, FieldInfo codec)] -> FieldInfo codec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
combinedName [(String, FieldInfo codec)]
subfieldInfos
  where
    combinedName :: String
combinedName = String
"(" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ([String] -> String
forall a. Monoid a => [a] -> a
mconcat ([String] -> String)
-> ([String] -> [String]) -> [String] -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> [String] -> [String]
forall a. a -> [a] -> [a]
intersperse String
",") ((FieldInfo codec -> String) -> [FieldInfo codec] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map FieldInfo codec -> String
forall codec. FieldInfo codec -> String
shortFieldType [FieldInfo codec]
fieldInfos) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
")"
    subfieldInfos :: [(String, FieldInfo codec)]
subfieldInfos =
      [ (String
"elem" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show (Int
n :: Int), FieldInfo codec
fi)
      | (Int
n, FieldInfo codec
fi) <- [Int] -> [FieldInfo codec] -> [(Int, FieldInfo codec)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Int
0,Int
1..] [FieldInfo codec]
fieldInfos
      ]

deriving via (ViaBinary (a, b))
  instance
    ( B.Binary a
    , B.Binary b
    )
    =>
    Serializable BinaryCodec (a, b)

deriving via (ViaBinary (a, b, c))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    )
    =>
    Serializable BinaryCodec (a, b, c)

deriving via (ViaBinary (a, b, c, d))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    )
    =>
    Serializable BinaryCodec (a, b, c, d)

deriving via (ViaBinary (a, b, c, d, e))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e)

deriving via (ViaBinary (a, b, c, d, e, f))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    , B.Binary f
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e, f)

deriving via (ViaBinary (a, b, c, d, e, f, g))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    , B.Binary f
    , B.Binary g
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e, f, g)

deriving via (ViaBinary (a, b, c, d, e, f, g, h))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    , B.Binary f
    , B.Binary g
    , B.Binary h
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e, f, g, h)

deriving via (ViaBinary (a, b, c, d, e, f, g, h, i))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    , B.Binary f
    , B.Binary g
    , B.Binary h
    , B.Binary i
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e, f, g, h, i)

deriving via (ViaBinary (a, b, c, d, e, f, g, h, i, j))
  instance
    ( B.Binary a
    , B.Binary b
    , B.Binary c
    , B.Binary d
    , B.Binary e
    , B.Binary f
    , B.Binary g
    , B.Binary h
    , B.Binary i
    , B.Binary j
    )
    =>
    Serializable BinaryCodec (a, b, c, d, e, f, g, h, i, j)

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         )
         => HasInfo BinaryCodec (a, b)
         where
  info :: Proxy BinaryCodec -> Proxy (a, b) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b)
_ :: Proxy (a, b)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         )
         => HasInfo BinaryCodec (a, b, c)
         where
  info :: Proxy BinaryCodec -> Proxy (a, b, c) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c)
_ :: Proxy (a, b, c)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         )
         => HasInfo BinaryCodec (a, b, c, d)
         where
  info :: Proxy BinaryCodec -> Proxy (a, b, c, d) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d)
_ :: Proxy (a, b, c, d)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         )
         => HasInfo BinaryCodec (a, b, c, d, e)
         where
  info :: Proxy BinaryCodec -> Proxy (a, b, c, d, e) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e)
_ :: Proxy (a, b, c, d, e)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         , HasInfo BinaryCodec f
         )
         => HasInfo BinaryCodec (a, b, c, d, e, f)
         where
  info :: Proxy BinaryCodec
-> Proxy (a, b, c, d, e, f) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e, f)
_ :: Proxy (a, b, c, d, e, f)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      , Proxy BinaryCodec -> Proxy f -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy f
forall {k} (t :: k). Proxy t
Proxy :: Proxy f)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         , HasInfo BinaryCodec f
         , HasInfo BinaryCodec g
         )
         => HasInfo BinaryCodec (a, b, c, d, e, f, g)
         where
  info :: Proxy BinaryCodec
-> Proxy (a, b, c, d, e, f, g) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e, f, g)
_ :: Proxy (a, b, c, d, e, f, g)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      , Proxy BinaryCodec -> Proxy f -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy f
forall {k} (t :: k). Proxy t
Proxy :: Proxy f)
      , Proxy BinaryCodec -> Proxy g -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy g
forall {k} (t :: k). Proxy t
Proxy :: Proxy g)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         , HasInfo BinaryCodec f
         , HasInfo BinaryCodec g
         , HasInfo BinaryCodec h
         )
         => HasInfo BinaryCodec (a, b, c, d, e, f, g, h)
         where
  info :: Proxy BinaryCodec
-> Proxy (a, b, c, d, e, f, g, h) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e, f, g, h)
_ :: Proxy (a, b, c, d, e, f, g, h)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      , Proxy BinaryCodec -> Proxy f -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy f
forall {k} (t :: k). Proxy t
Proxy :: Proxy f)
      , Proxy BinaryCodec -> Proxy g -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy g
forall {k} (t :: k). Proxy t
Proxy :: Proxy g)
      , Proxy BinaryCodec -> Proxy h -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy h
forall {k} (t :: k). Proxy t
Proxy :: Proxy h)
      ]


instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         , HasInfo BinaryCodec f
         , HasInfo BinaryCodec g
         , HasInfo BinaryCodec h
         , HasInfo BinaryCodec i
         )
         => HasInfo BinaryCodec (a, b, c, d, e, f, g, h, i)
         where
  info :: Proxy BinaryCodec
-> Proxy (a, b, c, d, e, f, g, h, i) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e, f, g, h, i)
_ :: Proxy (a, b, c, d, e, f, g, h, i)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      , Proxy BinaryCodec -> Proxy f -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy f
forall {k} (t :: k). Proxy t
Proxy :: Proxy f)
      , Proxy BinaryCodec -> Proxy g -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy g
forall {k} (t :: k). Proxy t
Proxy :: Proxy g)
      , Proxy BinaryCodec -> Proxy h -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy h
forall {k} (t :: k). Proxy t
Proxy :: Proxy h)
      , Proxy BinaryCodec -> Proxy i -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy i
forall {k} (t :: k). Proxy t
Proxy :: Proxy i)
      ]

instance ( HasInfo BinaryCodec a
         , HasInfo BinaryCodec b
         , HasInfo BinaryCodec c
         , HasInfo BinaryCodec d
         , HasInfo BinaryCodec e
         , HasInfo BinaryCodec f
         , HasInfo BinaryCodec g
         , HasInfo BinaryCodec h
         , HasInfo BinaryCodec i
         , HasInfo BinaryCodec j
         )
         => HasInfo BinaryCodec (a, b, c, d, e, f, g, h, i, j)
         where
  info :: Proxy BinaryCodec
-> Proxy (a, b, c, d, e, f, g, h, i, j) -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec (Proxy (a, b, c, d, e, f, g, h, i, j)
_ :: Proxy (a, b, c, d, e, f, g, h, i, j)) =
    [FieldInfo BinaryCodec] -> FieldInfo BinaryCodec
forall codec. [FieldInfo codec] -> FieldInfo codec
tupleInfo
      [ Proxy BinaryCodec -> Proxy a -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy a
forall {k} (t :: k). Proxy t
Proxy :: Proxy a)
      , Proxy BinaryCodec -> Proxy b -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy b
forall {k} (t :: k). Proxy t
Proxy :: Proxy b)
      , Proxy BinaryCodec -> Proxy c -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy c
forall {k} (t :: k). Proxy t
Proxy :: Proxy c)
      , Proxy BinaryCodec -> Proxy d -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy d
forall {k} (t :: k). Proxy t
Proxy :: Proxy d)
      , Proxy BinaryCodec -> Proxy e -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy e
forall {k} (t :: k). Proxy t
Proxy :: Proxy e)
      , Proxy BinaryCodec -> Proxy f -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy f
forall {k} (t :: k). Proxy t
Proxy :: Proxy f)
      , Proxy BinaryCodec -> Proxy g -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy g
forall {k} (t :: k). Proxy t
Proxy :: Proxy g)
      , Proxy BinaryCodec -> Proxy h -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy h
forall {k} (t :: k). Proxy t
Proxy :: Proxy h)
      , Proxy BinaryCodec -> Proxy i -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy i
forall {k} (t :: k). Proxy t
Proxy :: Proxy i)
      , Proxy BinaryCodec -> Proxy j -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy j
forall {k} (t :: k). Proxy t
Proxy :: Proxy j)
      ]

instance HasInfo BinaryCodec ByteString where
  info :: Proxy BinaryCodec -> Proxy ByteString -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy ByteString
_ =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"List"
      [ (String
"length", Proxy BinaryCodec -> Proxy Int -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Int
forall {k} (t :: k). Proxy t
Proxy :: Proxy Int))
      , (String
"items", FieldSize -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. FieldSize -> FieldInfo codec -> FieldInfo codec
listField (String -> FieldSize
VarSize String
"length") (Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8)))
      ]
deriving via (ViaBinary ByteString) instance Serializable BinaryCodec ByteString

instance HasInfo BinaryCodec LBS.ByteString where
  info :: Proxy BinaryCodec -> Proxy ByteString -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy ByteString
_ =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"List"
      [ (String
"length", Proxy BinaryCodec -> Proxy Int -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Int
forall {k} (t :: k). Proxy t
Proxy :: Proxy Int))
      , (String
"items", FieldSize -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. FieldSize -> FieldInfo codec -> FieldInfo codec
listField (String -> FieldSize
VarSize String
"length") (Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8)))
      ]
deriving via (ViaBinary LBS.ByteString) instance Serializable BinaryCodec LBS.ByteString

instance HasInfo BinaryCodec ShortByteString where
  info :: Proxy BinaryCodec -> Proxy ShortByteString -> FieldInfo BinaryCodec
info Proxy BinaryCodec
codec Proxy ShortByteString
_ =
    String
-> [(String, FieldInfo BinaryCodec)] -> FieldInfo BinaryCodec
forall codec.
String -> [(String, FieldInfo codec)] -> FieldInfo codec
compoundField String
"List"
      [ (String
"length", Proxy BinaryCodec -> Proxy Int -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Int
forall {k} (t :: k). Proxy t
Proxy :: Proxy Int))
      , (String
"items", FieldSize -> FieldInfo BinaryCodec -> FieldInfo BinaryCodec
forall codec. FieldSize -> FieldInfo codec -> FieldInfo codec
listField (String -> FieldSize
VarSize String
"length") (Proxy BinaryCodec -> Proxy Word8 -> FieldInfo BinaryCodec
forall codec a.
HasInfo codec a =>
Proxy codec -> Proxy a -> FieldInfo codec
info Proxy BinaryCodec
codec (Proxy Word8
forall {k} (t :: k). Proxy t
Proxy :: Proxy Word8)))
      ]
deriving via (ViaBinary ShortByteString) instance Serializable BinaryCodec ShortByteString