{-# LANGUAGE OverloadedStrings #-}

module TahoeLAFS.Storage.Backend.Null (
    NullBackend (NullBackend),
) where

import qualified Data.Set as Set
import TahoeLAFS.Storage.API (
    AllocationResult (..),
    CBORSet (..),
    Version (..),
    Version1Parameters (..),
 )
import TahoeLAFS.Storage.Backend (
    Backend (..),
 )

data NullBackend = NullBackend
    deriving (Int -> NullBackend -> ShowS
[NullBackend] -> ShowS
NullBackend -> String
(Int -> NullBackend -> ShowS)
-> (NullBackend -> String)
-> ([NullBackend] -> ShowS)
-> Show NullBackend
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [NullBackend] -> ShowS
$cshowList :: [NullBackend] -> ShowS
show :: NullBackend -> String
$cshow :: NullBackend -> String
showsPrec :: Int -> NullBackend -> ShowS
$cshowsPrec :: Int -> NullBackend -> ShowS
Show)

instance Backend NullBackend where
    version :: NullBackend -> IO Version
version NullBackend
NullBackend =
        Version -> IO Version
forall (m :: * -> *) a. Monad m => a -> m a
return
            Version :: Version1Parameters -> ShareData -> Version
Version
                { applicationVersion :: ShareData
applicationVersion = ShareData
"(null)"
                , parameters :: Version1Parameters
parameters =
                    Version1Parameters :: Size -> Size -> Size -> Version1Parameters
Version1Parameters
                        { maximumImmutableShareSize :: Size
maximumImmutableShareSize = Size
0
                        , maximumMutableShareSize :: Size
maximumMutableShareSize = Size
0
                        , availableSpace :: Size
availableSpace = Size
0
                        }
                }

    createImmutableStorageIndex :: NullBackend
-> String
-> Maybe [LeaseSecret]
-> AllocateBuckets
-> IO AllocationResult
createImmutableStorageIndex NullBackend
NullBackend String
_ Maybe [LeaseSecret]
_ AllocateBuckets
_ =
        AllocationResult -> IO AllocationResult
forall (m :: * -> *) a. Monad m => a -> m a
return
            AllocationResult :: [ShareNumber] -> [ShareNumber] -> AllocationResult
AllocationResult
                { alreadyHave :: [ShareNumber]
alreadyHave = [ShareNumber]
forall a. Monoid a => a
mempty
                , allocated :: [ShareNumber]
allocated = [ShareNumber]
forall a. Monoid a => a
mempty
                }

    writeImmutableShare :: NullBackend
-> String
-> ShareNumber
-> Maybe [LeaseSecret]
-> ShareData
-> QueryRange
-> IO ()
writeImmutableShare NullBackend
NullBackend String
_ ShareNumber
_ Maybe [LeaseSecret]
_ ShareData
_ =
        IO () -> QueryRange -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return IO ()
forall a. Monoid a => a
mempty

    adviseCorruptImmutableShare :: NullBackend -> String -> ShareNumber -> CorruptionDetails -> IO ()
adviseCorruptImmutableShare NullBackend
NullBackend String
_ ShareNumber
_ CorruptionDetails
_ =
        () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
forall a. Monoid a => a
mempty

    getImmutableShareNumbers :: NullBackend -> String -> IO (CBORSet ShareNumber)
getImmutableShareNumbers NullBackend
NullBackend String
_ =
        CBORSet ShareNumber -> IO (CBORSet ShareNumber)
forall (m :: * -> *) a. Monad m => a -> m a
return (Set ShareNumber -> CBORSet ShareNumber
forall a. Set a -> CBORSet a
CBORSet (Set ShareNumber -> CBORSet ShareNumber)
-> Set ShareNumber -> CBORSet ShareNumber
forall a b. (a -> b) -> a -> b
$ [ShareNumber] -> Set ShareNumber
forall a. Ord a => [a] -> Set a
Set.fromList [])

    readImmutableShare :: NullBackend -> String -> ShareNumber -> QueryRange -> IO ShareData
readImmutableShare NullBackend
NullBackend String
_ ShareNumber
_ QueryRange
_ = IO ShareData
forall a. Monoid a => a
mempty