hbs2/hbs2-tests/lib/HBS2/Tests/MapStore.hs

35 lines
1.0 KiB
Haskell

module HBS2.Tests.MapStore where
import Control.Monad.State as State
import Data.ByteString.Lazy (ByteString)
import Data.Functor.Identity
import Data.Map (Map)
import Data.Map qualified as Map
import HBS2.Hash
type MapStore = Map (Hash HbSync) ByteString
type MapStoreM a = MapStoreT Identity a
newtype MapStoreT m a = MapStoreT {unMapStoreT :: StateT MapStore m a}
deriving newtype (Functor, Applicative, Monad, MonadTrans, MonadState MapStore)
runMapStoreM :: MapStoreM a -> a
runMapStoreM = runIdentity . runMapStoreT
runMapStoreT :: (Monad m) => MapStoreT m a -> m a
runMapStoreT = flip evalStateT mempty . unMapStoreT
mapStorePutBlock :: (Monad m) => ByteString -> MapStoreT m (Hash HbSync)
mapStorePutBlock bs =
h <$ State.modify (Map.insert h bs)
where
h = hashObject bs
mapStoreReadBlock :: (Monad m) => (Hash HbSync) -> MapStoreT m (Maybe ByteString)
mapStoreReadBlock h =
State.gets (Map.lookup h)
mapStoreDeleteBlock :: (Monad m) => (Hash HbSync) -> MapStoreT m ()
mapStoreDeleteBlock h =
State.modify (Map.delete h)