| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Store.Version
Description
This module provides utilities which help ensure that we aren't
attempting to de-serialize data that is an older or newer version.
The WithVersion utility wraps up a datatype along with a version
tag. This version tag can either be provided by the user
(namedVersionConfig), or use a computed hash
(hashedVersionConfig).
The magic here is using an SYB traversal (Data) to get the
structure of all the data-types involved. This info is rendered to
text and hashed to yield a hash which describes it.
NOTE that this API is still quite new and so is likely to break compatibility in the future. It should also be expected that the computed hashes may change between major version bumps, though this will be minimized when directly feasible.
Synopsis
- newtype StoreVersion = StoreVersion {
- unStoreVersion :: ByteString
- data VersionConfig a = VersionConfig {
- vcExpectedHash :: Maybe String
- vcManualName :: Maybe String
- vcIgnore :: Set String
- vcRenames :: Map String String
- hashedVersionConfig :: String -> VersionConfig a
- namedVersionConfig :: String -> String -> VersionConfig a
- encodeWithVersionQ :: Data a => VersionConfig a -> Q Exp
- decodeWithVersionQ :: Data a => VersionConfig a -> Q Exp
Documentation
newtype StoreVersion Source #
Constructors
| StoreVersion | |
Fields
| |
Instances
| Data StoreVersion Source # | |||||
Defined in Data.Store.Version Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> StoreVersion -> c StoreVersion # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c StoreVersion # toConstr :: StoreVersion -> Constr # dataTypeOf :: StoreVersion -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c StoreVersion) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c StoreVersion) # gmapT :: (forall b. Data b => b -> b) -> StoreVersion -> StoreVersion # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> StoreVersion -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> StoreVersion -> r # gmapQ :: (forall d. Data d => d -> u) -> StoreVersion -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> StoreVersion -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> StoreVersion -> m StoreVersion # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> StoreVersion -> m StoreVersion # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> StoreVersion -> m StoreVersion # | |||||
| Generic StoreVersion Source # | |||||
Defined in Data.Store.Version Associated Types
| |||||
| Show StoreVersion Source # | |||||
Defined in Data.Store.Version Methods showsPrec :: Int -> StoreVersion -> ShowS show :: StoreVersion -> String showList :: [StoreVersion] -> ShowS | |||||
| Eq StoreVersion Source # | |||||
Defined in Data.Store.Version | |||||
| Ord StoreVersion Source # | |||||
Defined in Data.Store.Version Methods compare :: StoreVersion -> StoreVersion -> Ordering (<) :: StoreVersion -> StoreVersion -> Bool (<=) :: StoreVersion -> StoreVersion -> Bool (>) :: StoreVersion -> StoreVersion -> Bool (>=) :: StoreVersion -> StoreVersion -> Bool max :: StoreVersion -> StoreVersion -> StoreVersion min :: StoreVersion -> StoreVersion -> StoreVersion | |||||
| Store StoreVersion Source # | |||||
Defined in Data.Store.Version Methods size :: Size StoreVersion Source # poke :: StoreVersion -> Poke () Source # peek :: Peek StoreVersion Source # | |||||
| type Rep StoreVersion Source # | |||||
Defined in Data.Store.Version type Rep StoreVersion = D1 ('MetaData "StoreVersion" "Data.Store.Version" "store-0.7.20-DNtoAn2T5bHBT6ZlX0Zf8g" 'True) (C1 ('MetaCons "StoreVersion" 'PrefixI 'True) (S1 ('MetaSel ('Just "unStoreVersion") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString))) | |||||
data VersionConfig a Source #
Configuration for the version checking of a particular type.
Constructors
| VersionConfig | |
Fields
| |
Instances
| Data a => Data (VersionConfig a) Source # | |||||
Defined in Data.Store.Version Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> VersionConfig a -> c (VersionConfig a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (VersionConfig a) # toConstr :: VersionConfig a -> Constr # dataTypeOf :: VersionConfig a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (VersionConfig a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (VersionConfig a)) # gmapT :: (forall b. Data b => b -> b) -> VersionConfig a -> VersionConfig a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> VersionConfig a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> VersionConfig a -> r # gmapQ :: (forall d. Data d => d -> u) -> VersionConfig a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> VersionConfig a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> VersionConfig a -> m (VersionConfig a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> VersionConfig a -> m (VersionConfig a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> VersionConfig a -> m (VersionConfig a) # | |||||
| Generic (VersionConfig a) Source # | |||||
Defined in Data.Store.Version Associated Types
Methods from :: VersionConfig a -> Rep (VersionConfig a) x to :: Rep (VersionConfig a) x -> VersionConfig a | |||||
| Show (VersionConfig a) Source # | |||||
Defined in Data.Store.Version Methods showsPrec :: Int -> VersionConfig a -> ShowS show :: VersionConfig a -> String showList :: [VersionConfig a] -> ShowS | |||||
| Eq (VersionConfig a) Source # | |||||
Defined in Data.Store.Version Methods (==) :: VersionConfig a -> VersionConfig a -> Bool (/=) :: VersionConfig a -> VersionConfig a -> Bool | |||||
| type Rep (VersionConfig a) Source # | |||||
Defined in Data.Store.Version type Rep (VersionConfig a) = D1 ('MetaData "VersionConfig" "Data.Store.Version" "store-0.7.20-DNtoAn2T5bHBT6ZlX0Zf8g" 'False) (C1 ('MetaCons "VersionConfig" 'PrefixI 'True) ((S1 ('MetaSel ('Just "vcExpectedHash") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe String)) :*: S1 ('MetaSel ('Just "vcManualName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe String))) :*: (S1 ('MetaSel ('Just "vcIgnore") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set String)) :*: S1 ('MetaSel ('Just "vcRenames") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map String String))))) | |||||
hashedVersionConfig :: String -> VersionConfig a Source #
namedVersionConfig :: String -> String -> VersionConfig a Source #
encodeWithVersionQ :: Data a => VersionConfig a -> Q Exp Source #
decodeWithVersionQ :: Data a => VersionConfig a -> Q Exp Source #