{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} {-# OPTIONS_GHC -Wno-unused-imports #-} module Hjugement.CLI where import Control.Applicative (Applicative(..), Alternative(..)) import Control.Monad (Monad(..)) import Data.Bool import Data.Either (Either(..)) import Data.Function (($), (.)) import Data.Functor ((<$>), (<$)) import Data.Int (Int) import Data.List.NonEmpty (NonEmpty(..)) import Data.Maybe (Maybe(..), fromMaybe) import Data.Ord (Ord(..)) import Data.Semigroup (Semigroup(..)) import Data.String (String) import Data.Text (Text) import Data.Void (Void) import Symantic.CLI as CLI import System.Environment (getArgs) import System.IO (IO, FilePath, print, stderr, putStrLn) import Text.Show (Show(..)) import Type.Reflection (Typeable) import qualified Data.Set as Set import qualified Data.Text as Text import qualified Data.Text.Lazy.IO as TL import qualified Data.Version as Version import qualified Paths_hjugement_cli as Hjugement import qualified Symantic.Document as Doc import qualified System.IO as IO import Hjugement.CLI.Utils import Hjugement.CLI.Registrar import Hjugement.CLI.Trustee import Hjugement.CLI.MkElection progname :: Text progname = "hjugement" version :: Text version = progname <> "-" <> Text.pack (Version.showVersion Hjugement.version) api = program "hjugement" $ (api_options api_command) api_help True api_version api_command = rule "COMMAND" $ api_registrar api_trustee api_mkelection run_command opts = run_registrar opts :!: run_trustee opts :!: (run_mkelection :!: run_help api_mkelection) api_version = "Print the version." `helps` tagged (TagLong "version") nothing <.> response @Doc parseAPI = parser @Void @Doc api $ run_command :!: run_help api :!: run_version where run_version = return (Doc.from version <> Doc.newline)