diff options
Diffstat (limited to 'Types/Storage.hs')
-rw-r--r-- | Types/Storage.hs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Types/Storage.hs b/Types/Storage.hs new file mode 100644 index 0000000..bc11b55 --- /dev/null +++ b/Types/Storage.hs @@ -0,0 +1,35 @@ +{- Copyright 2016 Joey Hess <id@joeyh.name> + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE GeneralizedNewtypeDeriving #-} + +module Types.Storage where + +import Types + +-- | All known locations where shards can be stored, ordered with +-- preferred locations first. +newtype StorageLocations = StorageLocations [Storage] + deriving (Monoid) + +data Storage = Storage + { storeShard :: StorableObjectIdent -> Shard -> IO StoreResult + , retrieveShard :: ShardNum -> StorableObjectIdent -> IO RetrieveResult + , obscureShards :: IO ObscureResult + -- ^ run after making some calls to storeShard/retrieveShard, + -- to avoid correlation attacks + , countShards :: IO CountResult + } -- Note that there is no interface to enumerate shards. + +data StoreResult = StoreSuccess | StoreAlreadyExists | StoreFailure String + deriving (Show) + +data RetrieveResult = RetrieveSuccess Shard | RetrieveFailure String + +data ObscureResult = ObscureSuccess | ObscureFailure String + deriving (Show) + +data CountResult = CountResult Integer | CountFailure String + deriving (Show) |