erebos-0.2.3: src/Erebos/Storage/Monad.hs
module Erebos.Storage.Monad (
MonadStorage(..),
mloadKey,
) where
import Control.Monad.Except
import Control.Monad.Reader
import Erebos.Error
import Erebos.Object.Internal
import Erebos.Storable.Internal
import Erebos.Storage.Key
class Monad m => MonadStorage m where
getStorage :: m Storage
mstore :: Storable a => a -> m (Stored a)
default mstore :: MonadIO m => Storable a => a -> m (Stored a)
mstore x = do
st <- getStorage
wrappedStore st x
mstoreKey :: KeyPair sec pub => sec -> m ()
default mstoreKey :: (KeyPair sec pub, MonadIO m) => sec -> m ()
mstoreKey = liftIO . storeKey
mloadKeyMb :: KeyPair sec pub => Stored pub -> m (Maybe sec)
default mloadKeyMb :: (KeyPair sec pub, MonadIO m) => Stored pub -> m (Maybe sec)
mloadKeyMb = loadKeyMb
mloadKey :: (KeyPair sec pub, MonadStorage m, MonadError e m, FromErebosError e) => Stored pub -> m sec
mloadKey pub = maybe (throwOtherError $ "secret key not found for " <> show (storedRef pub)) return =<< mloadKeyMb pub
instance MonadIO m => MonadStorage (ReaderT Storage m) where
getStorage = ask