{-# LANGUAGE FlexibleInstances, DeriveTraversable #-}
module Development.Shake.Internal.History.Serialise(
BuildTree(..),
WithTypeReps(..), withTypeReps,
WithKeys(..), withKeys, withIds, withoutKeys,
SendAllKeys(..), RecvAllKeys(..),
SendOneKey(..), RecvOneKey(..),
SendDownloadFiles(..),
SendUpload(..)
) where
import Development.Shake.Internal.History.Bloom
import General.Extra
import General.Binary
import General.Ids
import Data.List.Extra
import Development.Shake.Internal.Value
import Development.Shake.Internal.FileInfo
import Development.Shake.Internal.History.Types
import qualified Data.HashMap.Strict as Map
import Data.Semigroup
import Data.Typeable
import Prelude
data BuildTree key
= Depend [key] [([BS_Identity], BuildTree key)]
| Done BS_Store [(FilePath, FileSize, FileHash)]
instance BinaryEx (BuildTree Int) where
getEx = undefined
putEx = undefined
instance Eq key => Semigroup (BuildTree key) where
Depend ks1 vs1 <> Depend ks2 vs2
| ks1 == ks2 = Depend ks1 $ mergeBy undefined vs1 vs2
| otherwise = Depend ks2 vs2
x@Done{} <> _ = x
_ <> y@Done{} = y
instance Eq key => Monoid (BuildTree key) where
mempty = Depend [] []
mappend = (<>)
data WithTypeReps a = WithTypeReps [BS_QTypeRep] a
instance BinaryEx a => BinaryEx (WithTypeReps a) where
putEx = undefined
getEx = undefined
withTypeReps :: Traversable f => f TypeRep -> WithTypeReps (f Int)
withTypeReps = undefined
data WithKeys a = WithKeys [BS_Key] a
instance BinaryEx a => BinaryEx (WithKeys a) where
putEx = undefined
getEx = undefined
withKeys :: Traversable f => f Key -> WithKeys (f Int)
withKeys = undefined
withIds :: Traversable f => (Id -> m Key) -> f Id -> m (WithKeys (f Int))
withIds = undefined
withoutKeys :: Map.HashMap TypeRep (BinaryOp Key) -> WithKeys (f Int) -> f Key
withoutKeys = undefined
data SendAllKeys typ = SendAllKeys Ver [(typ, Ver)]
deriving (Functor, Foldable, Traversable)
instance BinaryEx (SendAllKeys Int) where
putEx = undefined
getEx = undefined
newtype RecvAllKeys key = RecvAllKeys [(key, Ver, [key], Bloom [BS_Identity])]
instance BinaryEx (RecvAllKeys Int) where
getEx = undefined
putEx = undefined
data SendOneKey key = SendOneKey Ver key Ver Ver [(key, BS_Identity)]
instance BinaryEx (SendOneKey Int) where
getEx = undefined
putEx = undefined
newtype RecvOneKey key = RecvOneKey (BuildTree key)
instance BinaryEx (RecvOneKey Int) where
getEx = undefined
putEx = undefined
data SendDownloadFiles key = SendDownloadFiles Ver key Ver Ver [(FilePath, FileSize, FileHash)]
instance BinaryEx (SendDownloadFiles Int) where
getEx = undefined
putEx = undefined
data SendUpload key = SendUpload Ver key Ver Ver [[(key, BS_Identity)]] BS_Store [(FilePath, FileSize, FileHash)]
instance BinaryEx (SendUpload Int) where
getEx = undefined
putEx = undefined