{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE NamedFieldPuns #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} 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.Administrator import Hjugement.CLI.Registrar import Hjugement.CLI.Trustee progname :: Text progname = "hjugement" api = program "hjugement" $ (api_options api_agent) api_help True api_version run = run_agent :!: run_help api :!: run_version api_agent = rule "AGENT" $ api_administrator api_trustee api_registrar run_agent params = run_administrator params :!: run_trustee params :!: run_registrar params api_version = "Print the version." `helps` tagged (TagLong "version") nothing <.> response @Doc run_version = return (Doc.from version <> Doc.newline) version :: Text version = progname <> "-" <> Text.pack (Version.showVersion Hjugement.version) parseAPI = parser @Void @Doc api run