diff options
Diffstat (limited to 'RemoteClass.hs')
-rw-r--r-- | RemoteClass.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/RemoteClass.hs b/RemoteClass.hs new file mode 100644 index 000000000..df2aefb71 --- /dev/null +++ b/RemoteClass.hs @@ -0,0 +1,46 @@ +{- git-annex remotes class + - + - Copyright 2011 Joey Hess <joey@kitenet.net> + - + - Licensed under the GNU GPL version 3 or higher. + -} + +module RemoteClass where + +import Control.Exception + +import Annex +import UUID +import Key + +data Remote = Remote { + -- each Remote has a unique uuid + uuid :: UUID, + -- each Remote has a human visible name + name :: String, + -- Remotes have a use cost; higher is more expensive + cost :: Int, + -- Transfers a key to the remote. + storeKey :: Key -> Annex Bool, + -- retrieves a key's contents to a file + retrieveKeyFile :: Key -> FilePath -> Annex Bool, + -- removes a key's contents + removeKey :: Key -> Annex Bool, + -- Checks if a key is present in the remote; if the remote + -- cannot be accessed returns a Left error. + hasKey :: Key -> Annex (Either IOException Bool), + -- Some remotes can check hasKey without an expensive network + -- operation. + hasKeyCheap :: Bool +} + +instance Show Remote where + show remote = "Remote { uuid =\"" ++ uuid remote ++ "\" }" + +-- two remotes are the same if they have the same uuid +instance Eq Remote where + a == b = uuid a == uuid b + +-- order remotes by cost +instance Ord Remote where + compare a b = compare (cost a) (cost b) |