serdoc-core-0.1.0.0: Generated documentation of serialization formats
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.SerDoc.Class

Synopsis

Typeclasses

class Codec codec Source #

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.

Associated Types

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.

Methods

encode :: Proxy codec -> a -> MonadEncode codec () Source #

Encode / serialize a value.

decode :: Proxy codec -> MonadDecode codec a Source #

Decode / deserialize a value.

Instances

Instances details
(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 # 
Instance details

Defined in Data.SerDoc.Class

Methods

encode :: Proxy codec -> ViaEnum a -> MonadEncode codec () Source #

decode :: Proxy codec -> MonadDecode codec (ViaEnum a) Source #

class Codec codec => HasInfo codec a where Source #

Serialization metadata for a Codec.

Methods

info :: Proxy codec -> Proxy a -> FieldInfo codec Source #

Instances

Instances details
(Enum a, Bounded a, Typeable a, Show a, Codec codec, HasInfo codec (DefEnumEncoding codec)) => HasInfo codec (ViaEnum a) Source # 
Instance details

Defined in Data.SerDoc.Class

Methods

info :: Proxy codec -> Proxy (ViaEnum a) -> FieldInfo codec Source #

Helpers For Writing Instances

newtype ViaEnum a Source #

Newtype wrapper for deriving / defining HasInfo and Serializable instances for enum types.

Constructors

ViaEnum 

Fields

Instances

Instances details
(Enum a, Bounded a, Typeable a, Show a, Codec codec, HasInfo codec (DefEnumEncoding codec)) => HasInfo codec (ViaEnum a) Source # 
Instance details

Defined in Data.SerDoc.Class

Methods

info :: Proxy codec -> Proxy (ViaEnum a) -> FieldInfo codec 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 # 
Instance details

Defined in Data.SerDoc.Class

Methods

encode :: Proxy codec -> ViaEnum a -> MonadEncode codec () Source #

decode :: Proxy codec -> MonadDecode codec (ViaEnum a) Source #

Show a => Show (ViaEnum a) Source # 
Instance details

Defined in Data.SerDoc.Class

Methods

showsPrec :: Int -> ViaEnum a -> ShowS #

show :: ViaEnum a -> String #

showList :: [ViaEnum a] -> ShowS #

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'

fieldType :: forall codec. HasInfo codec Word32 => FieldInfo codec -> String Source #

infoOf :: String -> FieldInfo codec -> FieldInfo codec Source #

Reduce a FieldInfo to report only the relevant information for a known constructor.

resolveSizeScopes :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => Proxy codec -> Map String [String] -> FieldSize -> FieldSize Source #

fieldSize :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => FieldInfo codec -> FieldSize Source #

fieldSizeScoped :: forall codec. (Codec codec, HasInfo codec (DefEnumEncoding codec)) => [String] -> Map String [String] -> FieldInfo codec -> FieldSize Source #