{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
module TahoeLAFS.Storage.APIDocs where
import Prelude hiding (
Eq,
)
import Data.Bits (
shiftL,
)
import Data.Map (
Map,
fromList,
)
import Servant (
Capture (..),
Optional,
QueryParams,
)
import Servant.Docs (
DocCapture (DocCapture),
DocQueryParam (DocQueryParam),
ParamKind (List, Normal),
ToCapture (toCapture),
ToParam (toParam),
ToSample (toSamples),
samples,
singleSample,
)
import TahoeLAFS.Storage.API (
AllocateBuckets (AllocateBuckets),
AllocationResult (AllocationResult),
ApplicationVersion,
CorruptionDetails (CorruptionDetails),
Offset,
ReadResult,
ReadTestWriteResult (ReadTestWriteResult),
ReadTestWriteVectors (ReadTestWriteVectors),
ReadVector,
ShareData,
ShareNumber (ShareNumber),
SlotSecrets (SlotSecrets),
StorageIndex,
TestOperator (Eq),
TestVector (TestVector),
TestWriteVectors (TestWriteVectors),
Version (Version),
Version1Parameters (Version1Parameters),
WriteVector (WriteVector),
leaseCancelSecretLength,
leaseRenewSecretLength,
renewSecretLength,
writeEnablerSecretLength,
)
instance ToCapture (Capture "storage_index" StorageIndex) where
toCapture _ = DocCapture "storage index" "(hex string) a storage index to use to address the data"
instance ToCapture (Capture "share_number" ShareNumber) where
toCapture _ = DocCapture "share number" "(integer) a share number to use to address a particular share"
instance ToParam (QueryParams "share_number" ShareNumber) where
toParam _ = DocQueryParam "share_number" [] "(integer) a share number to use to address a particular share" List
instance ToParam (QueryParams "offset" Integer) where
toParam _ = DocQueryParam "offset" [] "(integer) offset into a share to read or write" List
instance ToParam (QueryParams "size" Integer) where
toParam _ = DocQueryParam "size" [] "(integer) number of bytes of a share to read" List
instance ToSample ReadResult where
toSamples _ = singleSample mempty
instance ToSample Version where
toSamples _ =
singleSample $
Version (Version1Parameters (1 `shiftL` 16) (2 `shiftL` 32) (2 `shiftL` 64)) "blub version??"
instance ToSample AllocateBuckets where
toSamples _ =
singleSample
( AllocateBuckets
(example renewSecretLength "a")
(example renewSecretLength "b")
[ShareNumber 1, ShareNumber 3]
1024
)
instance ToSample AllocationResult where
toSamples _ =
singleSample $ AllocationResult [ShareNumber 1] [ShareNumber 3]
instance ToSample ShareData where
toSamples _ =
singleSample "abcdefgh"
instance ToSample () where
toSamples _ = singleSample ()
instance ToSample CorruptionDetails where
toSamples _ = singleSample $ CorruptionDetails "sha256 mismatch maybe?"
instance ToSample ShareNumber where
toSamples _ = samples [ShareNumber 0, ShareNumber 3]
instance ToSample ReadTestWriteVectors where
toSamples _ =
singleSample $
ReadTestWriteVectors
(SlotSecrets (example writeEnablerSecretLength "c") (example leaseRenewSecretLength "d") (example leaseCancelSecretLength "e"))
sampleTestWriteVectors
sampleReadVector
instance ToSample ReadTestWriteResult where
toSamples _ =
singleSample $
ReadTestWriteResult True sampleReadResult
sampleTestWriteVectors :: Map ShareNumber TestWriteVectors
sampleTestWriteVectors =
fromList
[(ShareNumber 0, TestWriteVectors [TestVector 32 33 Eq "x"] [WriteVector 32 "y"])]
sampleReadVector :: [ReadVector]
sampleReadVector = mempty
sampleReadResult :: ReadResult
sampleReadResult = mempty
example :: Int -> [a] -> [a]
example n s = concat $ replicate n s