TCache-0.10.0.5: A Transactional cache with user-defined persistence

Safe HaskellNone

Data.TCache.DefaultPersistence

Synopsis

Documentation

class Indexable a whereSource

Indexable is an utility class used to derive instances of IResource

Example:

data Person= Person{ pname :: String, cars :: [DBRef Car]} deriving (Show, Read, Typeable)
data Car= Car{owner :: DBRef Person , cname:: String} deriving (Show, Read, Eq, Typeable)

Since Person and Car are instances of Read ans Show, by defining the Indexable instance will implicitly define the IResource instance for file persistence:

instance Indexable Person where  key Person{pname=n} = "Person " ++ n
instance Indexable Car where key Car{cname= n} = "Car " ++ n

Methods

key :: a -> StringSource

defPathSource

Arguments

:: a 
-> String

additional extension for default file paths. IMPORTANT: defPath must depend on the datatype, not the value (must be constant). Default is TCacheData/

Instances

Indexable Int 
Indexable Integer 
Indexable String 
Indexable () 
Indexable IndexText 
Indexable (Queue a) 
(Typeable reg, Typeable a) => Indexable (Index reg a) 

class Serializable a whereSource

Serialize is an alternative to the IResource class for defining persistence in TCache. The deserialization must be as lazy as possible. serialization/deserialization are not performance critical in TCache

Read, Show, instances are implicit instances of Serializable

    serialize  = show
    deserialize= read

Since write and read to disk of to/from the cache are not be very frequent The performance of serialization is not critical.

Methods

serialize :: a -> ByteStringSource

deserialize :: ByteString -> aSource

setPersistSource

Arguments

:: a 
-> Persist

defaultPersistif not overriden

Instances

Serializable IndexText 
Serialize a => Serializable (Queue a) 
Queriable reg a => Serializable (Index reg a) 

defaultPersist :: PersistSource

Implements default persistence of objects in files with their keys as filenames

data Persist Source

a persist mechanism has to implement these three primitives defaultpersist is the default file persistence

Constructors

Persist

delete

Fields

readByKey :: String -> IO (Maybe ByteString)

read by key. It must be strict

write :: String -> ByteString -> IO ()

write. It must be strict

delete :: String -> IO ()