{-|
Module      : CmdOptions
Description : Command-line options.
Copyright   : (c) IOcrafts, 2024-present
License     : BSD
Maintainer  : Maurizio Dusi
Stability   : stable
Portability : POSIX

This module holds the command-line options accepted by executable.
-}

module CmdOptions
    ( options
    ) where

import           Data.Version           ( showVersion )

import           Options                ( Direction (..), Options (..) )

import           Paths_hsftp            ( version )

import           System.Console.CmdArgs ( CmdArgs, Mode, args, cmdArgsMode,
                                          enum, explicit, groupname, help, name,
                                          program, summary, typ, (&=) )


-- | Defines the command line options for the `hsftp` program.
options :: Mode (CmdArgs Options)
options :: Mode (CmdArgs Options)
options = Options -> Mode (CmdArgs Options)
forall a. Data a => a -> Mode (CmdArgs a)
cmdArgsMode (Options -> Mode (CmdArgs Options))
-> Options -> Mode (CmdArgs Options)
forall a b. (a -> b) -> a -> b
$ Options
          {     conf :: FilePath
conf = FilePath
""         FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
typ FilePath
"FILE"  FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Load conf from file"
          ,     fromDate :: FilePath
fromDate = FilePath
""     FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
typ FilePath
"DATE" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Filter files by date (YYYY-MM-DD HH:MM UTC|PST|...)" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= Ann
explicit FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"from-date"
          ,     extensions :: [FilePath]
extensions = []   [FilePath] -> Ann -> [FilePath]
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Filter files by extensions"
          ,     direction :: Direction
direction = [Direction] -> Direction
forall val. Data val => [val] -> val
enum [Direction
Up Direction -> Ann -> Direction
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"upload", Direction
Down Direction -> Ann -> Direction
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"download"]
          ,     src :: FilePath
src = FilePath
""          FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
typ FilePath
"DIR" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Folder to transfer from" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= Ann
explicit FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"transfer-from"
          ,     dst :: FilePath
dst = FilePath
""          FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
typ FilePath
"DIR" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Folder to transfer to" FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= Ann
explicit FilePath -> Ann -> FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"transfer-to"
          ,     archive :: Maybe FilePath
archive = Maybe FilePath
forall a. Maybe a
Nothing Maybe FilePath -> Ann -> Maybe FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
typ FilePath
"DIR" Maybe FilePath -> Ann -> Maybe FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Folder to archive to after upload" Maybe FilePath -> Ann -> Maybe FilePath
forall val. Data val => val -> Ann -> val
&= Ann
explicit Maybe FilePath -> Ann -> Maybe FilePath
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"archive-to"
          ,     verbose :: Int
verbose = Int
0       Int -> Ann -> Int
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
groupname FilePath
"\nMiscellaneous" Int -> Ann -> Int
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Verbose level: 1, 2 or 3" Int -> Ann -> Int
forall val. Data val => val -> Ann -> val
&= Ann
explicit Int -> Ann -> Int
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"verbose"
          ,     dryRun :: Bool
dryRun = Bool
False    Bool -> Ann -> Bool
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
help FilePath
"Do a dry-run (\"No-op\") transfer." Bool -> Ann -> Bool
forall val. Data val => val -> Ann -> val
&= Ann
explicit Bool -> Ann -> Bool
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"dry-run" Bool -> Ann -> Bool
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
name FilePath
"n"
          ,     others :: [FilePath]
others = []       [FilePath] -> Ann -> [FilePath]
forall val. Data val => val -> Ann -> val
&= Ann
args
          } Options -> Ann -> Options
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
summary (FilePath
"Hsftp " FilePath -> FilePath -> FilePath
forall a. Semigroup a => a -> a -> a
<> Version -> FilePath
showVersion Version
version FilePath -> FilePath -> FilePath
forall a. Semigroup a => a -> a -> a
<> FilePath
". Usage: hsftp OPTION") Options -> Ann -> Options
forall val. Data val => val -> Ann -> val
&= FilePath -> Ann
program FilePath
"hsftp"