winery-0.3.1: Sustainable serialisation library

Safe HaskellNone
LanguageHaskell2010

Data.Winery

Contents

Synopsis

Documentation

data Schema Source #

Instances
Eq Schema Source # 
Instance details

Defined in Data.Winery

Methods

(==) :: Schema -> Schema -> Bool #

(/=) :: Schema -> Schema -> Bool #

Read Schema Source # 
Instance details

Defined in Data.Winery

Show Schema Source # 
Instance details

Defined in Data.Winery

Generic Schema Source # 
Instance details

Defined in Data.Winery

Associated Types

type Rep Schema :: * -> * #

Methods

from :: Schema -> Rep Schema x #

to :: Rep Schema x -> Schema #

Pretty Schema Source # 
Instance details

Defined in Data.Winery

Methods

pretty :: Schema -> Doc ann #

prettyList :: [Schema] -> Doc ann #

Serialise Schema Source # 
Instance details

Defined in Data.Winery

type Rep Schema Source # 
Instance details

Defined in Data.Winery

type Rep Schema = D1 (MetaData "Schema" "Data.Winery" "winery-0.3.1-3EL9r23ZhE8EupBsF2RVTp" False) ((((C1 (MetaCons "SFix" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Schema)) :+: (C1 (MetaCons "SSelf" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8)) :+: C1 (MetaCons "SList" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Schema)))) :+: (C1 (MetaCons "SArray" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (VarInt Int)) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Schema)) :+: (C1 (MetaCons "SProduct" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [Schema])) :+: C1 (MetaCons "SProductFixed" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(VarInt Int, Schema)]))))) :+: ((C1 (MetaCons "SRecord" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(Text, Schema)])) :+: (C1 (MetaCons "SVariant" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 [(Text, [Schema])])) :+: C1 (MetaCons "SSchema" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Word8)))) :+: ((C1 (MetaCons "SUnit" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SBool" PrefixI False) (U1 :: * -> *)) :+: (C1 (MetaCons "SChar" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SWord8" PrefixI False) (U1 :: * -> *))))) :+: (((C1 (MetaCons "SWord16" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "SWord32" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SWord64" PrefixI False) (U1 :: * -> *))) :+: (C1 (MetaCons "SInt8" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "SInt16" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SInt32" PrefixI False) (U1 :: * -> *)))) :+: ((C1 (MetaCons "SInt64" PrefixI False) (U1 :: * -> *) :+: (C1 (MetaCons "SInteger" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SFloat" PrefixI False) (U1 :: * -> *))) :+: ((C1 (MetaCons "SDouble" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SBytes" PrefixI False) (U1 :: * -> *)) :+: (C1 (MetaCons "SText" PrefixI False) (U1 :: * -> *) :+: C1 (MetaCons "SUTCTime" PrefixI False) (U1 :: * -> *))))))

class Typeable a => Serialise a where Source #

Serialisable datatype

Methods

schemaVia :: Proxy a -> [TypeRep] -> Schema Source #

Obtain the schema of the datatype. [TypeRep] is for handling recursion.

toEncoding :: a -> Encoding Source #

Serialise a value.

deserialiser :: Deserialiser a Source #

constantSize :: Proxy a -> Maybe Int Source #

If this is Just x, the size of toEncoding must be x. deserialiser must not depend on this value.

schemaVia :: (Generic a, GSerialiseVariant (Rep a)) => Proxy a -> [TypeRep] -> Schema Source #

Obtain the schema of the datatype. [TypeRep] is for handling recursion.

toEncoding :: (Generic a, GSerialiseVariant (Rep a)) => a -> Encoding Source #

Serialise a value.

deserialiser :: (Generic a, GSerialiseVariant (Rep a)) => Deserialiser a Source #

Instances
Serialise Bool Source # 
Instance details

Defined in Data.Winery

Serialise Char Source # 
Instance details

Defined in Data.Winery

Serialise Double Source # 
Instance details

Defined in Data.Winery

Serialise Float Source # 
Instance details

Defined in Data.Winery

Serialise Int Source # 
Instance details

Defined in Data.Winery

Serialise Int8 Source # 
Instance details

Defined in Data.Winery

Serialise Int16 Source # 
Instance details

Defined in Data.Winery

Serialise Int32 Source # 
Instance details

Defined in Data.Winery

Serialise Int64 Source # 
Instance details

Defined in Data.Winery

Serialise Integer Source # 
Instance details

Defined in Data.Winery

Serialise Ordering Source # 
Instance details

Defined in Data.Winery

Serialise Word Source # 
Instance details

Defined in Data.Winery

Serialise Word8 Source # 
Instance details

Defined in Data.Winery

Serialise Word16 Source # 
Instance details

Defined in Data.Winery

Serialise Word32 Source # 
Instance details

Defined in Data.Winery

Serialise Word64 Source # 
Instance details

Defined in Data.Winery

Serialise () Source # 
Instance details

Defined in Data.Winery

Serialise ByteString Source # 
Instance details

Defined in Data.Winery

Serialise ByteString Source # 
Instance details

Defined in Data.Winery

Serialise Scientific Source # 
Instance details

Defined in Data.Winery

Serialise Text Source # 
Instance details

Defined in Data.Winery

Serialise UTCTime Source # 
Instance details

Defined in Data.Winery

Serialise IntSet Source # 
Instance details

Defined in Data.Winery

Serialise NominalDiffTime Source # 
Instance details

Defined in Data.Winery

Serialise Encoding Source # 
Instance details

Defined in Data.Winery

Serialise Schema Source # 
Instance details

Defined in Data.Winery

Serialise a => Serialise [a] Source # 
Instance details

Defined in Data.Winery

Serialise a => Serialise (Maybe a) Source # 
Instance details

Defined in Data.Winery

Serialise a => Serialise (Identity a) Source # 
Instance details

Defined in Data.Winery

Serialise v => Serialise (IntMap v) Source # 
Instance details

Defined in Data.Winery

Serialise a => Serialise (Seq a) Source # 
Instance details

Defined in Data.Winery

(Ord a, Serialise a) => Serialise (Set a) Source # 
Instance details

Defined in Data.Winery

(Unbox a, Serialise a) => Serialise (Vector a) Source # 
Instance details

Defined in Data.Winery

(Storable a, Serialise a) => Serialise (Vector a) Source # 
Instance details

Defined in Data.Winery

Serialise a => Serialise (Vector a) Source # 
Instance details

Defined in Data.Winery

(Typeable a, Bits a, Integral a) => Serialise (VarInt a) Source # 
Instance details

Defined in Data.Winery

(Serialise a, Serialise b) => Serialise (Either a b) Source # 
Instance details

Defined in Data.Winery

(Serialise a, Serialise b) => Serialise (a, b) Source # 
Instance details

Defined in Data.Winery

(Eq k, Hashable k, Serialise k, Serialise v) => Serialise (HashMap k v) Source # 
Instance details

Defined in Data.Winery

(Ord k, Serialise k, Serialise v) => Serialise (Map k v) Source # 
Instance details

Defined in Data.Winery

(Serialise a, Serialise b, Serialise c) => Serialise (a, b, c) Source # 
Instance details

Defined in Data.Winery

Methods

schemaVia :: Proxy (a, b, c) -> [TypeRep] -> Schema Source #

toEncoding :: (a, b, c) -> Encoding Source #

deserialiser :: Deserialiser (a, b, c) Source #

constantSize :: Proxy (a, b, c) -> Maybe Int Source #

(Serialise a, Typeable b) => Serialise (Const a b) Source # 
Instance details

Defined in Data.Winery

(Serialise a, Serialise b, Serialise c, Serialise d) => Serialise (a, b, c, d) Source # 
Instance details

Defined in Data.Winery

Methods

schemaVia :: Proxy (a, b, c, d) -> [TypeRep] -> Schema Source #

toEncoding :: (a, b, c, d) -> Encoding Source #

deserialiser :: Deserialiser (a, b, c, d) Source #

constantSize :: Proxy (a, b, c, d) -> Maybe Int Source #

schema :: forall proxy a. Serialise a => proxy a -> Schema Source #

Obtain the schema of the datatype.

Standalone serialisation

serialise :: Serialise a => a -> ByteString Source #

Serialise a value along with its schema.

writeFileSerialise :: Serialise a => FilePath -> a -> IO () Source #

Serialise a value along with its schema.

Separate serialisation

newtype Deserialiser a Source #

Deserialiser is a Plan that creates a Decoder.

Constructors

Deserialiser 
Instances
Functor Deserialiser Source # 
Instance details

Defined in Data.Winery

Methods

fmap :: (a -> b) -> Deserialiser a -> Deserialiser b #

(<$) :: a -> Deserialiser b -> Deserialiser a #

Applicative Deserialiser Source # 
Instance details

Defined in Data.Winery

Alternative Deserialiser Source # 
Instance details

Defined in Data.Winery

serialiseOnly :: Serialise a => a -> ByteString Source #

Serialise a value without its schema.

getDecoder :: Serialise a => Schema -> Either StrategyError (Decoder a) Source #

Obtain a decoder from a schema.

getDecoderBy :: Deserialiser a -> Schema -> Either StrategyError (Decoder a) Source #

Get a decoder from a Deserialiser and a schema.

decodeCurrent :: forall a. Serialise a => Decoder a Source #

Decode a value with the current schema.

Encoding combinators

Decoding combinators

newtype Plan a Source #

Constructors

Plan 

Fields

Instances
Monad Plan Source # 
Instance details

Defined in Data.Winery

Methods

(>>=) :: Plan a -> (a -> Plan b) -> Plan b #

(>>) :: Plan a -> Plan b -> Plan b #

return :: a -> Plan a #

fail :: String -> Plan a #

Functor Plan Source # 
Instance details

Defined in Data.Winery

Methods

fmap :: (a -> b) -> Plan a -> Plan b #

(<$) :: a -> Plan b -> Plan a #

Applicative Plan Source # 
Instance details

Defined in Data.Winery

Methods

pure :: a -> Plan a #

(<*>) :: Plan (a -> b) -> Plan a -> Plan b #

liftA2 :: (a -> b -> c) -> Plan a -> Plan b -> Plan c #

(*>) :: Plan a -> Plan b -> Plan b #

(<*) :: Plan a -> Plan b -> Plan a #

Alternative Plan Source # 
Instance details

Defined in Data.Winery

Methods

empty :: Plan a #

(<|>) :: Plan a -> Plan a -> Plan a #

some :: Plan a -> Plan [a] #

many :: Plan a -> Plan [a] #

extractListBy :: Deserialiser a -> Deserialiser [a] Source #

Extract a list or an array of values.

extractField :: Serialise a => Text -> Deserialiser a Source #

Extract a field of a record.

extractFieldBy :: Typeable a => Deserialiser a -> Text -> Deserialiser a Source #

Extract a field using the supplied Deserialiser.

extractConstructorBy :: Typeable a => Deserialiser a -> Text -> Deserialiser (Maybe a) Source #

Tries to extract a specific constructor of a variant. Useful for implementing backward-compatible deserialisers.

Variable-length quantity

newtype VarInt a Source #

Encoded in variable-length quantity.

Constructors

VarInt 

Fields

Instances
Bounded a => Bounded (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

minBound :: VarInt a #

maxBound :: VarInt a #

Enum a => Enum (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

succ :: VarInt a -> VarInt a #

pred :: VarInt a -> VarInt a #

toEnum :: Int -> VarInt a #

fromEnum :: VarInt a -> Int #

enumFrom :: VarInt a -> [VarInt a] #

enumFromThen :: VarInt a -> VarInt a -> [VarInt a] #

enumFromTo :: VarInt a -> VarInt a -> [VarInt a] #

enumFromThenTo :: VarInt a -> VarInt a -> VarInt a -> [VarInt a] #

Eq a => Eq (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

(==) :: VarInt a -> VarInt a -> Bool #

(/=) :: VarInt a -> VarInt a -> Bool #

Integral a => Integral (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

quot :: VarInt a -> VarInt a -> VarInt a #

rem :: VarInt a -> VarInt a -> VarInt a #

div :: VarInt a -> VarInt a -> VarInt a #

mod :: VarInt a -> VarInt a -> VarInt a #

quotRem :: VarInt a -> VarInt a -> (VarInt a, VarInt a) #

divMod :: VarInt a -> VarInt a -> (VarInt a, VarInt a) #

toInteger :: VarInt a -> Integer #

Num a => Num (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

(+) :: VarInt a -> VarInt a -> VarInt a #

(-) :: VarInt a -> VarInt a -> VarInt a #

(*) :: VarInt a -> VarInt a -> VarInt a #

negate :: VarInt a -> VarInt a #

abs :: VarInt a -> VarInt a #

signum :: VarInt a -> VarInt a #

fromInteger :: Integer -> VarInt a #

Ord a => Ord (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

compare :: VarInt a -> VarInt a -> Ordering #

(<) :: VarInt a -> VarInt a -> Bool #

(<=) :: VarInt a -> VarInt a -> Bool #

(>) :: VarInt a -> VarInt a -> Bool #

(>=) :: VarInt a -> VarInt a -> Bool #

max :: VarInt a -> VarInt a -> VarInt a #

min :: VarInt a -> VarInt a -> VarInt a #

Read a => Read (VarInt a) Source # 
Instance details

Defined in Data.Winery

Real a => Real (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

toRational :: VarInt a -> Rational #

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

Defined in Data.Winery

Methods

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

show :: VarInt a -> String #

showList :: [VarInt a] -> ShowS #

Bits a => Bits (VarInt a) Source # 
Instance details

Defined in Data.Winery

Methods

(.&.) :: VarInt a -> VarInt a -> VarInt a #

(.|.) :: VarInt a -> VarInt a -> VarInt a #

xor :: VarInt a -> VarInt a -> VarInt a #

complement :: VarInt a -> VarInt a #

shift :: VarInt a -> Int -> VarInt a #

rotate :: VarInt a -> Int -> VarInt a #

zeroBits :: VarInt a #

bit :: Int -> VarInt a #

setBit :: VarInt a -> Int -> VarInt a #

clearBit :: VarInt a -> Int -> VarInt a #

complementBit :: VarInt a -> Int -> VarInt a #

testBit :: VarInt a -> Int -> Bool #

bitSizeMaybe :: VarInt a -> Maybe Int #

bitSize :: VarInt a -> Int #

isSigned :: VarInt a -> Bool #

shiftL :: VarInt a -> Int -> VarInt a #

unsafeShiftL :: VarInt a -> Int -> VarInt a #

shiftR :: VarInt a -> Int -> VarInt a #

unsafeShiftR :: VarInt a -> Int -> VarInt a #

rotateL :: VarInt a -> Int -> VarInt a #

rotateR :: VarInt a -> Int -> VarInt a #

popCount :: VarInt a -> Int #

(Typeable a, Bits a, Integral a) => Serialise (VarInt a) Source # 
Instance details

Defined in Data.Winery

Internal

data Strategy a Source #

Instances
Monad Strategy Source # 
Instance details

Defined in Data.Winery.Internal

Methods

(>>=) :: Strategy a -> (a -> Strategy b) -> Strategy b #

(>>) :: Strategy a -> Strategy b -> Strategy b #

return :: a -> Strategy a #

fail :: String -> Strategy a #

Functor Strategy Source # 
Instance details

Defined in Data.Winery.Internal

Methods

fmap :: (a -> b) -> Strategy a -> Strategy b #

(<$) :: a -> Strategy b -> Strategy a #

MonadFix Strategy Source # 
Instance details

Defined in Data.Winery.Internal

Methods

mfix :: (a -> Strategy a) -> Strategy a #

Applicative Strategy Source # 
Instance details

Defined in Data.Winery.Internal

Methods

pure :: a -> Strategy a #

(<*>) :: Strategy (a -> b) -> Strategy a -> Strategy b #

liftA2 :: (a -> b -> c) -> Strategy a -> Strategy b -> Strategy c #

(*>) :: Strategy a -> Strategy b -> Strategy b #

(<*) :: Strategy a -> Strategy b -> Strategy a #

Alternative Strategy Source # 
Instance details

Defined in Data.Winery.Internal

Methods

empty :: Strategy a #

(<|>) :: Strategy a -> Strategy a -> Strategy a #

some :: Strategy a -> Strategy [a] #

many :: Strategy a -> Strategy [a] #

Generics

class GSerialiseRecord f Source #

Minimal complete definition

recordSchema, recordDecoder

Instances
GSerialiseRecord f => GSerialiseRecord (D1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

recordSchema :: proxy (D1 c f) -> [TypeRep] -> [(Text, Schema)]

recordDecoder :: Maybe (D1 c f x) -> TransFusion (FieldDecoder Text) Decoder (Decoder (D1 c f x))

GSerialiseRecord f => GSerialiseRecord (C1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

recordSchema :: proxy (C1 c f) -> [TypeRep] -> [(Text, Schema)]

recordDecoder :: Maybe (C1 c f x) -> TransFusion (FieldDecoder Text) Decoder (Decoder (C1 c f x))

(GSerialiseRecord f, GSerialiseRecord g) => GSerialiseRecord (f :*: g :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

recordSchema :: proxy (f :*: g) -> [TypeRep] -> [(Text, Schema)]

recordDecoder :: Maybe ((f :*: g) x) -> TransFusion (FieldDecoder Text) Decoder (Decoder ((f :*: g) x))

(Serialise a, Selector c) => GSerialiseRecord (S1 c (K1 i a :: k -> *) :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

recordSchema :: proxy (S1 c (K1 i a)) -> [TypeRep] -> [(Text, Schema)]

recordDecoder :: Maybe (S1 c (K1 i a) x) -> TransFusion (FieldDecoder Text) Decoder (Decoder (S1 c (K1 i a) x))

gschemaViaRecord :: forall proxy a. (GSerialiseRecord (Rep a), Generic a, Typeable a) => proxy a -> [TypeRep] -> Schema Source #

Generic implementation of schemaVia for a record.

class GEncodeRecord f Source #

Minimal complete definition

recordEncoder

Instances
GEncodeRecord f => GEncodeRecord (D1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

GEncodeRecord f => GEncodeRecord (C1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

(GEncodeRecord f, GEncodeRecord g) => GEncodeRecord (f :*: g :: k -> *) Source # 
Instance details

Defined in Data.Winery

Serialise a => GEncodeRecord (S1 c (K1 i a :: k -> *) :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

recordEncoder :: S1 c (K1 i a) x -> EncodingMulti -> EncodingMulti

gtoEncodingRecord :: (GEncodeRecord (Rep a), Generic a) => a -> Encoding Source #

Generic implementation of toEncoding for a record.

gdeserialiserRecord Source #

Arguments

:: (GSerialiseRecord (Rep a), Generic a, Typeable a) 
=> Maybe a

default value (optional)

-> Deserialiser a 

Generic implementation of deserialiser for a record.

class GSerialiseVariant f Source #

Minimal complete definition

variantCount, variantSchema, variantEncoder, variantDecoder

Instances
GSerialiseVariant f => GSerialiseVariant (D1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

variantCount :: proxy (D1 c f) -> Int

variantSchema :: proxy (D1 c f) -> [TypeRep] -> [(Text, [Schema])]

variantEncoder :: Int -> D1 c f x -> Encoding

variantDecoder :: [(Text, [Schema] -> Strategy (Decoder (D1 c f x)))]

GSerialiseVariant f => GSerialiseVariant (S1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

variantCount :: proxy (S1 c f) -> Int

variantSchema :: proxy (S1 c f) -> [TypeRep] -> [(Text, [Schema])]

variantEncoder :: Int -> S1 c f x -> Encoding

variantDecoder :: [(Text, [Schema] -> Strategy (Decoder (S1 c f x)))]

(GSerialiseProduct f, Constructor c) => GSerialiseVariant (C1 c f :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

variantCount :: proxy (C1 c f) -> Int

variantSchema :: proxy (C1 c f) -> [TypeRep] -> [(Text, [Schema])]

variantEncoder :: Int -> C1 c f x -> Encoding

variantDecoder :: [(Text, [Schema] -> Strategy (Decoder (C1 c f x)))]

(GSerialiseVariant f, GSerialiseVariant g) => GSerialiseVariant (f :+: g :: k -> *) Source # 
Instance details

Defined in Data.Winery

Methods

variantCount :: proxy (f :+: g) -> Int

variantSchema :: proxy (f :+: g) -> [TypeRep] -> [(Text, [Schema])]

variantEncoder :: Int -> (f :+: g) x -> Encoding

variantDecoder :: [(Text, [Schema] -> Strategy (Decoder ((f :+: g) x)))]

gschemaViaVariant :: forall proxy a. (GSerialiseVariant (Rep a), Typeable a, Generic a) => proxy a -> [TypeRep] -> Schema Source #

Generic implementation of schemaVia for an ADT.

gtoEncodingVariant :: (GSerialiseVariant (Rep a), Generic a) => a -> Encoding Source #

Generic implementation of toEncoding for an ADT.

gdeserialiserVariant :: forall a. (GSerialiseVariant (Rep a), Generic a, Typeable a) => Deserialiser a Source #

Generic implementation of deserialiser for an ADT.

Preset schema