module Rob.Tasks where

import qualified Rob.Package as Package
import Rob.UserMessages (newTaskHelp, addTaskHelp, listTaskHelp, removeTaskHelp)
import qualified Rob.Types as Types (Task(..))

import System.Console.CmdArgs

list :: Types.Task
list :: Task
list = Task
Types.List Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
help String
listTaskHelp

-- | New task factory function
new :: Types.Task
new :: Task
new = Task
Types.New Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
help String
newTaskHelp

-- | New task factory function
remove :: Types.Task
remove :: Task
remove = Task
Types.Remove Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
help String
removeTaskHelp

-- | Add task factory function
add :: Types.Task
add :: Task
add = Add :: String -> String -> Task
Types.Add {
    $sel:name:Add :: String
Types.name = String
forall a. Default a => a
def String -> Ann -> String
forall val. Data val => val -> Ann -> val
&= String -> Ann
typ String
"template-name" String -> Ann -> String
forall val. Data val => val -> Ann -> val
&= Int -> Ann
argPos Int
0,
    $sel:path:Add :: String
Types.path = String
forall a. Default a => a
def String -> Ann -> String
forall val. Data val => val -> Ann -> val
&= String -> Ann
typ String
"path/to/the/template/folder" String -> Ann -> String
forall val. Data val => val -> Ann -> val
&= Int -> Ann
argPos Int
1
  } Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
help String
addTaskHelp

-- | Export all the command line modes
mode :: Mode (CmdArgs Types.Task)
mode :: Mode (CmdArgs Task)
mode = Task -> Mode (CmdArgs Task)
forall a. Data a => a -> Mode (CmdArgs a)
cmdArgsMode (Task -> Mode (CmdArgs Task)) -> Task -> Mode (CmdArgs Task)
forall a b. (a -> b) -> a -> b
$ [Task] -> Task
forall val. Data val => [val] -> val
modes [Task
new, Task
add, Task
remove, Task
list]
     Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
help String
Package.description
     Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
program String
Package.name
     Task -> Ann -> Task
forall val. Data val => val -> Ann -> val
&= String -> Ann
summary ([String] -> String
unwords [String
Package.name, String
"- v", String
Package.version, String
Package.author])