{-# 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, QueryParams, ) import Servant.Docs ( DocCapture (DocCapture), DocQueryParam (DocQueryParam), ParamKind (List), ToCapture (toCapture), ToParam (toParam), ToSample (toSamples), samples, singleSample, ) import TahoeLAFS.Storage.API ( AllocateBuckets (AllocateBuckets), AllocationResult (AllocationResult), CorruptionDetails (CorruptionDetails), ReadResult, ReadTestWriteResult (ReadTestWriteResult), ReadTestWriteVectors (ReadTestWriteVectors), ReadVector, ShareData, ShareNumber (ShareNumber), StorageIndex, TestOperator (Eq), TestVector (TestVector), TestWriteVectors (TestWriteVectors), Version (Version), Version1Parameters (Version1Parameters), WriteVector (WriteVector), ) 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 [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 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"] (Just 100) ) ] sampleReadVector :: [ReadVector] sampleReadVector = mempty sampleReadResult :: ReadResult sampleReadResult = mempty example :: Int -> [a] -> [a] example n s = concat $ replicate n s