{-# LANGUAGE OverloadedStrings #-} module Lib ( gen10String, genStorageIndex, positiveIntegers, b32encode, b32decode, ) where import Data.Word ( Word8, ) import qualified Data.Base32String as Base32 import Data.ByteString ( ByteString, pack, ) import qualified Data.Text as Text import Test.QuickCheck ( Arbitrary (arbitrary), Gen, suchThatMap, vectorOf, ) -- Get the Arbitrary ByteString instance. import Test.QuickCheck.Instances.ByteString () import TahoeLAFS.Storage.API ( ShareNumber, StorageIndex, shareNumber, ) gen10String :: Gen String gen10String = vectorOf 10 arbitrary gen10ByteString :: Gen ByteString gen10ByteString = suchThatMap (vectorOf 10 (arbitrary :: Gen Word8)) (Just . pack) genStorageIndex :: Gen StorageIndex genStorageIndex = suchThatMap gen10ByteString (Just . b32encode) positiveIntegers :: Gen Integer positiveIntegers = suchThatMap (arbitrary :: Gen Integer) (Just . abs) instance Arbitrary ShareNumber where arbitrary = suchThatMap positiveIntegers shareNumber b32table :: ByteString b32table = "abcdefghijklmnopqrstuvwxyz234567" b32encode :: ByteString -> String b32encode = Text.unpack . Base32.toText . Base32.fromBytes b32table b32decode :: String -> ByteString b32decode base32 = Base32.toBytes b32table $ Base32.fromText b32table $ Text.pack base32