Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- class Codec codec where
- type MonadEncode codec :: Type -> Type
- type MonadDecode codec :: Type -> Type
- type DefEnumEncoding codec :: Type
- class Codec codec => Serializable codec a where
- encode :: Proxy codec -> a -> MonadEncode codec ()
- decode :: Proxy codec -> MonadDecode codec a
- class Codec codec => HasInfo codec a where
- newtype ViaEnum a = ViaEnum {
- viaEnum :: a
- enumInfo :: 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
- encodeEnum :: forall codec n a. (Enum a, Bounded a, Codec codec, Num n, Serializable codec n) => Proxy codec -> Proxy n -> a -> MonadEncode codec ()
- decodeEnum :: forall codec n a. (Enum a, Bounded a, Codec codec, Integral n, Serializable codec n, Monad (MonadDecode codec)) => Proxy codec -> Proxy n -> MonadDecode codec a
- getTypeName :: Typeable a => Proxy a -> String
- fieldType :: forall codec. HasInfo codec Word32 => FieldInfo codec -> String
- shortFieldType :: FieldInfo codec -> String
- infoOf :: String -> FieldInfo codec -> FieldInfo codec
- formatPath :: [String] -> String
- scopeFieldSize :: String -> FieldSize -> FieldSize
- simplifyFieldSize :: FieldSize -> FieldSize
- resolveSizeScopes :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => Proxy codec -> Map String [String] -> FieldSize -> FieldSize
- fieldSize :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => FieldInfo codec -> FieldSize
- fieldSizeScoped :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => [String] -> Map String [String] -> FieldInfo codec -> FieldSize
Typeclasses
Abstracts over an individual serializer / deserializer, a.k.a., a
"codec". A codec typically provides a serializer, deserializer, and
metadata for each serializable type; however, for various reasons, the
Codec
typeclass itself only captures the associated types that are involved
in serializing and deserializing.
type MonadEncode codec :: Type -> Type Source #
The Monad
in which encoding can happen.
type MonadDecode codec :: Type -> Type Source #
The Monad
in which decoding can happen.
type DefEnumEncoding codec :: Type Source #
Unless explicitly declared otherwise, enum fields will be encoded as this type.
type DefEnumEncoding codec = Word16
class Codec codec => Serializable codec a where Source #
Serialization and deserialization API for a Codec
.
encode :: Proxy codec -> a -> MonadEncode codec () Source #
Encode / serialize a value.
decode :: Proxy codec -> MonadDecode codec a Source #
Decode / deserialize a value.
Instances
(Enum a, Bounded a, Codec codec, Integral (DefEnumEncoding codec), Num (DefEnumEncoding codec), Monad (MonadEncode codec), Monad (MonadDecode codec), Serializable codec (DefEnumEncoding codec)) => Serializable codec (ViaEnum a) Source # | |
Defined in Data.SerDoc.Class |
Helpers For Writing Instances
Newtype wrapper for deriving / defining HasInfo
and Serializable
instances for enum types.
Instances
(Enum a, Bounded a, Typeable a, Show a, Codec codec, HasInfo codec (DefEnumEncoding codec)) => HasInfo codec (ViaEnum a) Source # | |
(Enum a, Bounded a, Codec codec, Integral (DefEnumEncoding codec), Num (DefEnumEncoding codec), Monad (MonadEncode codec), Monad (MonadDecode codec), Serializable codec (DefEnumEncoding codec)) => Serializable codec (ViaEnum a) Source # | |
Defined in Data.SerDoc.Class | |
Show a => Show (ViaEnum a) Source # | |
enumInfo :: 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 Source #
encodeEnum :: forall codec n a. (Enum a, Bounded a, Codec codec, Num n, Serializable codec n) => Proxy codec -> Proxy n -> a -> MonadEncode codec () Source #
decodeEnum :: forall codec n a. (Enum a, Bounded a, Codec codec, Integral n, Serializable codec n, Monad (MonadDecode codec)) => Proxy codec -> Proxy n -> MonadDecode codec a Source #
Helpers For Dealing With FieldInfo
And 'Field Size'
shortFieldType :: FieldInfo codec -> String Source #
infoOf :: String -> FieldInfo codec -> FieldInfo codec Source #
Reduce a FieldInfo
to report only the relevant information for a known
constructor.
formatPath :: [String] -> String Source #
resolveSizeScopes :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => Proxy codec -> Map String [String] -> FieldSize -> FieldSize Source #