packages feed

ec2-unikernel-0.9: src/Options.hs

module Options(
         Options
       , defaultOptions
       , optAwsAccessKey
       , optAwsSecretKey
       , optS3Bucket
       , optS3Zone
       , optAwsRegion
       , optTargetKey
       , optImageName
       , optKernel
       , optKernelArgs
       , optRamdisks
       )
 where

import Control.Lens(Lens', lens)
import Data.String(fromString)
import Data.Text(Text)
import Network.AWS(AccessKey, SecretKey, Region(..))
import Network.AWS.S3.Types(BucketName, ObjectKey)

data Options = Options
  { _optAwsAccessKey :: AccessKey
  , _optAwsSecretKey :: SecretKey
  , _optS3Bucket     :: BucketName
  , _optS3Zone       :: Text
  , _optTargetKey    :: ObjectKey
  , _optAwsRegion    :: Region
  , _optKernel       :: FilePath
  , _optKernelArgs   :: String
  , _optRamdisks     :: [FilePath]
  , _optImageName    :: Text
  }

defaultOptions :: Options
defaultOptions = Options
  { _optAwsAccessKey = fromString ""
  , _optAwsSecretKey = fromString ""
  , _optS3Bucket     = fromString "unikernels"
  , _optS3Zone       = fromString "us-west-2a"
  , _optTargetKey    = fromString "badfile/,:"
  , _optAwsRegion    = Oregon
  , _optKernel       = "kernel"
  , _optKernelArgs   = ""
  , _optRamdisks     = []
  , _optImageName    = fromString ""
  }

-- We're explicitly writing these instances because some combination of
-- Amazonka, lens, and Template Haskell explode when we try to build this
-- under GHC 7.8.4.

optAwsAccessKey :: Lens' Options AccessKey
optAwsAccessKey = lens _optAwsAccessKey (\ x v -> x{ _optAwsAccessKey = v })

optAwsSecretKey :: Lens' Options SecretKey
optAwsSecretKey = lens _optAwsSecretKey (\ x v -> x{ _optAwsSecretKey = v })

optS3Bucket :: Lens' Options BucketName
optS3Bucket = lens _optS3Bucket (\ x v -> x{ _optS3Bucket = v })

optS3Zone :: Lens' Options Text
optS3Zone = lens _optS3Zone (\ x v -> x{ _optS3Zone = v })

optTargetKey :: Lens' Options ObjectKey
optTargetKey = lens _optTargetKey (\ x v -> x{ _optTargetKey = v })

optAwsRegion :: Lens' Options Region
optAwsRegion = lens _optAwsRegion (\ x v -> x{ _optAwsRegion = v })

optKernel :: Lens' Options FilePath
optKernel = lens _optKernel (\ x v -> x{ _optKernel = v })

optKernelArgs :: Lens' Options String
optKernelArgs = lens _optKernelArgs (\ x v -> x{ _optKernelArgs = v })

optRamdisks :: Lens' Options [FilePath]
optRamdisks = lens _optRamdisks (\ x v -> x{ _optRamdisks = v })

optImageName :: Lens' Options Text
optImageName = lens _optImageName (\ x v -> x{ _optImageName = v })