content: 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 })
  
  