{-# 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 :: Proxy (Capture "storage_index" StorageIndex) -> DocCapture toCapture Proxy (Capture "storage_index" StorageIndex) _ = StorageIndex -> StorageIndex -> DocCapture DocCapture StorageIndex "storage index" StorageIndex "(hex string) a storage index to use to address the data" instance ToCapture (Capture "share_number" ShareNumber) where toCapture :: Proxy (Capture "share_number" ShareNumber) -> DocCapture toCapture Proxy (Capture "share_number" ShareNumber) _ = StorageIndex -> StorageIndex -> DocCapture DocCapture StorageIndex "share number" StorageIndex "(integer) a share number to use to address a particular share" instance ToParam (QueryParams "share_number" ShareNumber) where toParam :: Proxy (QueryParams "share_number" ShareNumber) -> DocQueryParam toParam Proxy (QueryParams "share_number" ShareNumber) _ = StorageIndex -> [StorageIndex] -> StorageIndex -> ParamKind -> DocQueryParam DocQueryParam StorageIndex "share_number" [] StorageIndex "(integer) a share number to use to address a particular share" ParamKind List instance ToParam (QueryParams "offset" Integer) where toParam :: Proxy (QueryParams "offset" Integer) -> DocQueryParam toParam Proxy (QueryParams "offset" Integer) _ = StorageIndex -> [StorageIndex] -> StorageIndex -> ParamKind -> DocQueryParam DocQueryParam StorageIndex "offset" [] StorageIndex "(integer) offset into a share to read or write" ParamKind List instance ToParam (QueryParams "size" Integer) where toParam :: Proxy (QueryParams "size" Integer) -> DocQueryParam toParam Proxy (QueryParams "size" Integer) _ = StorageIndex -> [StorageIndex] -> StorageIndex -> ParamKind -> DocQueryParam DocQueryParam StorageIndex "size" [] StorageIndex "(integer) number of bytes of a share to read" ParamKind List instance ToSample ReadResult where toSamples :: Proxy ReadResult -> [(Text, ReadResult)] toSamples Proxy ReadResult _ = ReadResult -> [(Text, ReadResult)] forall a. a -> [(Text, a)] singleSample ReadResult forall a. Monoid a => a mempty instance ToSample Version where toSamples :: Proxy Version -> [(Text, Version)] toSamples Proxy Version _ = Version -> [(Text, Version)] forall a. a -> [(Text, a)] singleSample (Version -> [(Text, Version)]) -> Version -> [(Text, Version)] forall a b. (a -> b) -> a -> b $ Version1Parameters -> ApplicationVersion -> Version Version (Integer -> Integer -> Integer -> Version1Parameters Version1Parameters (Integer 1 Integer -> Int -> Integer forall a. Bits a => a -> Int -> a `shiftL` Int 16) (Integer 2 Integer -> Int -> Integer forall a. Bits a => a -> Int -> a `shiftL` Int 32) (Integer 2 Integer -> Int -> Integer forall a. Bits a => a -> Int -> a `shiftL` Int 64)) ApplicationVersion "blub version??" instance ToSample AllocateBuckets where toSamples :: Proxy AllocateBuckets -> [(Text, AllocateBuckets)] toSamples Proxy AllocateBuckets _ = AllocateBuckets -> [(Text, AllocateBuckets)] forall a. a -> [(Text, a)] singleSample ( StorageIndex -> StorageIndex -> [ShareNumber] -> Integer -> AllocateBuckets AllocateBuckets (Int -> StorageIndex -> StorageIndex forall a. Int -> [a] -> [a] example Int forall a. Num a => a renewSecretLength StorageIndex "a") (Int -> StorageIndex -> StorageIndex forall a. Int -> [a] -> [a] example Int forall a. Num a => a renewSecretLength StorageIndex "b") [Integer -> ShareNumber ShareNumber Integer 1, Integer -> ShareNumber ShareNumber Integer 3] Integer 1024 ) instance ToSample AllocationResult where toSamples :: Proxy AllocationResult -> [(Text, AllocationResult)] toSamples Proxy AllocationResult _ = AllocationResult -> [(Text, AllocationResult)] forall a. a -> [(Text, a)] singleSample (AllocationResult -> [(Text, AllocationResult)]) -> AllocationResult -> [(Text, AllocationResult)] forall a b. (a -> b) -> a -> b $ [ShareNumber] -> [ShareNumber] -> AllocationResult AllocationResult [Integer -> ShareNumber ShareNumber Integer 1] [Integer -> ShareNumber ShareNumber Integer 3] instance ToSample ShareData where toSamples :: Proxy ApplicationVersion -> [(Text, ApplicationVersion)] toSamples Proxy ApplicationVersion _ = ApplicationVersion -> [(Text, ApplicationVersion)] forall a. a -> [(Text, a)] singleSample ApplicationVersion "abcdefgh" instance ToSample () where toSamples :: Proxy () -> [(Text, ())] toSamples Proxy () _ = () -> [(Text, ())] forall a. a -> [(Text, a)] singleSample () instance ToSample CorruptionDetails where toSamples :: Proxy CorruptionDetails -> [(Text, CorruptionDetails)] toSamples Proxy CorruptionDetails _ = CorruptionDetails -> [(Text, CorruptionDetails)] forall a. a -> [(Text, a)] singleSample (CorruptionDetails -> [(Text, CorruptionDetails)]) -> CorruptionDetails -> [(Text, CorruptionDetails)] forall a b. (a -> b) -> a -> b $ StorageIndex -> CorruptionDetails CorruptionDetails StorageIndex "sha256 mismatch maybe?" instance ToSample ShareNumber where toSamples :: Proxy ShareNumber -> [(Text, ShareNumber)] toSamples Proxy ShareNumber _ = [ShareNumber] -> [(Text, ShareNumber)] forall a. [a] -> [(Text, a)] samples [Integer -> ShareNumber ShareNumber Integer 0, Integer -> ShareNumber ShareNumber Integer 3] instance ToSample ReadTestWriteVectors where toSamples :: Proxy ReadTestWriteVectors -> [(Text, ReadTestWriteVectors)] toSamples Proxy ReadTestWriteVectors _ = ReadTestWriteVectors -> [(Text, ReadTestWriteVectors)] forall a. a -> [(Text, a)] singleSample (ReadTestWriteVectors -> [(Text, ReadTestWriteVectors)]) -> ReadTestWriteVectors -> [(Text, ReadTestWriteVectors)] forall a b. (a -> b) -> a -> b $ SlotSecrets -> Map ShareNumber TestWriteVectors -> [ReadVector] -> ReadTestWriteVectors ReadTestWriteVectors (StorageIndex -> StorageIndex -> StorageIndex -> SlotSecrets SlotSecrets (Int -> StorageIndex -> StorageIndex forall a. Int -> [a] -> [a] example Int forall a. Num a => a writeEnablerSecretLength StorageIndex "c") (Int -> StorageIndex -> StorageIndex forall a. Int -> [a] -> [a] example Int forall a. Num a => a leaseRenewSecretLength StorageIndex "d") (Int -> StorageIndex -> StorageIndex forall a. Int -> [a] -> [a] example Int forall a. Num a => a leaseCancelSecretLength StorageIndex "e")) Map ShareNumber TestWriteVectors sampleTestWriteVectors [ReadVector] sampleReadVector instance ToSample ReadTestWriteResult where toSamples :: Proxy ReadTestWriteResult -> [(Text, ReadTestWriteResult)] toSamples Proxy ReadTestWriteResult _ = ReadTestWriteResult -> [(Text, ReadTestWriteResult)] forall a. a -> [(Text, a)] singleSample (ReadTestWriteResult -> [(Text, ReadTestWriteResult)]) -> ReadTestWriteResult -> [(Text, ReadTestWriteResult)] forall a b. (a -> b) -> a -> b $ Bool -> ReadResult -> ReadTestWriteResult ReadTestWriteResult Bool True ReadResult sampleReadResult sampleTestWriteVectors :: Map ShareNumber TestWriteVectors sampleTestWriteVectors :: Map ShareNumber TestWriteVectors sampleTestWriteVectors = [(ShareNumber, TestWriteVectors)] -> Map ShareNumber TestWriteVectors forall k a. Ord k => [(k, a)] -> Map k a fromList [(Integer -> ShareNumber ShareNumber Integer 0, [TestVector] -> [WriteVector] -> TestWriteVectors TestWriteVectors [Integer -> Integer -> TestOperator -> ApplicationVersion -> TestVector TestVector Integer 32 Integer 33 TestOperator Eq ApplicationVersion "x"] [Integer -> ApplicationVersion -> WriteVector WriteVector Integer 32 ApplicationVersion "y"])] sampleReadVector :: [ReadVector] sampleReadVector :: [ReadVector] sampleReadVector = [ReadVector] forall a. Monoid a => a mempty sampleReadResult :: ReadResult sampleReadResult :: ReadResult sampleReadResult = ReadResult forall a. Monoid a => a mempty example :: Int -> [a] -> [a] example :: Int -> [a] -> [a] example Int n [a] s = [[a]] -> [a] forall (t :: * -> *) a. Foldable t => t [a] -> [a] concat ([[a]] -> [a]) -> [[a]] -> [a] forall a b. (a -> b) -> a -> b $ Int -> [a] -> [[a]] forall a. Int -> a -> [a] replicate Int n [a] s