packages feed

tahoe-great-black-swamp-0.3.0.1: src/TahoeLAFS/Storage/APIDocs.hs

{-# 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