{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE NamedFieldPuns #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} module Judgmentphile.CLI where import Control.Monad (Monad(..)) import Data.Bool import Data.Function (($)) import Data.Semigroup (Semigroup(..)) import Data.Text (Text) import Data.Void (Void) import Symantic.CLI as CLI import qualified Data.Text as Text import qualified Data.Version as Version import qualified Paths_judgmentphile_cli as Judgmentphile import qualified Symantic.Document as Doc import Judgmentphile.CLI.Utils import Judgmentphile.CLI.Administrator import Judgmentphile.CLI.Registrar import Judgmentphile.CLI.Trustee import Judgmentphile.CLI.Voter progname :: Text progname = "judgmentphile" api = program "judgmentphile" $ (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 api_voter run_agent params = run_administrator params :!: run_trustee params :!: run_registrar params :!: run_voter params api_version = "Print the version." `helps` tag (TagLong "version") nothing <.> response @Doc run_version = return (Doc.from version <> Doc.newline) version :: Text version = progname <> "-" <> Text.pack (Version.showVersion Judgmentphile.version) parseAPI = parser @Void @Doc api run