summaryrefslogtreecommitdiff
path: root/BackendTypes.hs
diff options
context:
space:
mode:
Diffstat (limited to 'BackendTypes.hs')
-rw-r--r--BackendTypes.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/BackendTypes.hs b/BackendTypes.hs
new file mode 100644
index 000000000..2ef65f469
--- /dev/null
+++ b/BackendTypes.hs
@@ -0,0 +1,44 @@
+{- git-annex backend data types
+ -
+ - Mostly only backend implementations should need to import this.
+ -}
+
+module BackendTypes where
+
+import Control.Monad.State
+import Data.String.Utils
+import qualified GitRepo as Git
+
+-- git-annex's runtime state type doesn't really belong here,
+-- but it uses Backend, so has to be here to avoid a depends loop.
+data AnnexState = AnnexState {
+ repo :: Git.Repo,
+ backends :: [Backend]
+} deriving (Show)
+
+-- git-annex's monad
+type Annex = StateT AnnexState IO
+
+-- annexed filenames are mapped into keys
+data Key = Key String deriving (Eq)
+
+-- show a key to convert it to a string
+instance Show Key where
+ show (Key v) = v
+
+-- this structure represents a key/value backend
+data Backend = Backend {
+ -- name of this backend
+ name :: String,
+ -- converts a filename to a key
+ getKey :: FilePath -> Annex (Maybe Key),
+ -- stores a file's contents to a key
+ storeFileKey :: FilePath -> Key -> Annex Bool,
+ -- retrieves a key's contents to a file
+ retrieveKeyFile :: Key -> FilePath -> Annex Bool,
+ -- removes a key
+ removeKey :: Key -> Annex Bool
+}
+
+instance Show Backend where
+ show backend = "Backend { name =\"" ++ (name backend) ++ "\" }"