module Stackctl.Commands ( cat , capture , changes , deploy , version ) where import Stackctl.Prelude import Stackctl.ColorOption import Stackctl.DirectoryOption import Stackctl.FilterOption import Stackctl.Spec.Capture import Stackctl.Spec.Cat import Stackctl.Spec.Changes import Stackctl.Spec.Deploy import Stackctl.Subcommand import Stackctl.VerboseOption import Stackctl.Version cat :: ( HasColorOption options , HasVerboseOption options , HasDirectoryOption options , HasFilterOption options ) => Subcommand options CatOptions cat = Subcommand { name = "cat" , description = "Pretty-print specifications" , parse = parseCatOptions , run = runAppSubcommand runCat } capture :: ( HasColorOption options , HasVerboseOption options , HasDirectoryOption options ) => Subcommand options CaptureOptions capture = Subcommand { name = "capture" , description = "Capture deployed Stacks as specifications" , parse = parseCaptureOptions , run = runAppSubcommand runCapture } changes :: ( HasColorOption options , HasVerboseOption options , HasDirectoryOption options , HasFilterOption options ) => Subcommand options ChangesOptions changes = Subcommand { name = "changes" , description = "Review changes between specification and deployed state" , parse = parseChangesOptions , run = runAppSubcommand runChanges } deploy :: ( HasColorOption options , HasVerboseOption options , HasDirectoryOption options , HasFilterOption options ) => Subcommand options DeployOptions deploy = Subcommand { name = "deploy" , description = "Deploy specifications" , parse = parseDeployOptions , run = runAppSubcommand runDeploy } version :: Subcommand options () version = Subcommand { name = "version" , description = "Output the version" , parse = pure () , run = \() _ -> logVersion }