module Options
( Opts(..)
, execParser
, prefs
, showHelpOnEmpty
, optsParser
, optsParserInfo ) where
import Options.Applicative
( (<**>),
auto,
fullDesc,
header,
help,
info,
long,
metavar,
option,
strOption,
prefs,
progDesc,
short,
showHelpOnEmpty,
value,
execParser,
Parser,
ParserInfo,
infoOption,
hidden )
import Options.Applicative.Extra ( helperWith )
import Version ( versionStr, progName )
import Data.Kind (Type)
data Opts = Opts
{ Opts -> Integer
optPort :: Integer
, Opts -> String
optHost :: String
, Opts -> String
optPass :: String
, Opts -> * -> *
optVersion :: Type -> Type
}
optsParser :: Parser Opts
optsParser :: Parser Opts
optsParser
= Integer -> String -> String -> (* -> *) -> Opts
Opts
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Integer
portOptParser
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
hostOptParser
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser String
passOptParser
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> forall a. Parser (a -> a)
versionOptParse
portOptParser :: Parser Integer
portOptParser :: Parser Integer
portOptParser
= forall a. ReadM a -> Mod OptionFields a -> Parser a
option forall a. Read a => ReadM a
auto
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"port"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'p'
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PORTNUM"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasValue f => a -> Mod f a
value Integer
6600
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"Port number"
hostOptParser :: Parser String
hostOptParser :: Parser String
hostOptParser
= forall s. IsString s => Mod OptionFields s -> Parser s
strOption
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"ADDRESS"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"host"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'h'
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasValue f => a -> Mod f a
value String
"localhost"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"Host address"
passOptParser :: Parser String
passOptParser :: Parser String
passOptParser
= forall a. ReadM a -> Mod OptionFields a -> Parser a
option forall a. Read a => ReadM a
auto
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. HasMetavar f => String -> Mod f a
metavar String
"PASSWORD"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"password"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'P'
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasValue f => a -> Mod f a
value String
""
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"Password for connecting (will be sent as plain text)"
versionOptParse :: Parser (a -> a)
versionOptParse :: forall a. Parser (a -> a)
versionOptParse =
forall a. String -> Mod OptionFields (a -> a) -> Parser (a -> a)
infoOption String
versionStr
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"version"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. HasName f => Char -> Mod f a
short Char
'V'
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. String -> Mod f a
help String
"Display the version number"
optsParserInfo :: ParserInfo Opts
optsParserInfo :: ParserInfo Opts
optsParserInfo = forall a. Parser a -> InfoMod a -> ParserInfo a
info (Parser Opts
optsParser forall (f :: * -> *) a b. Applicative f => f a -> f (a -> b) -> f b
<**> forall a. Parser (a -> a)
helper')
forall a b. (a -> b) -> a -> b
$ forall a. InfoMod a
fullDesc
forall a. Semigroup a => a -> a -> a
<> forall a. String -> InfoMod a
progDesc String
"Print currently playing song information as JSON"
forall a. Semigroup a => a -> a -> a
<> forall a. String -> InfoMod a
header (String
progName forall a. [a] -> [a] -> [a]
++ String
" - " forall a. [a] -> [a] -> [a]
++ String
"Current MPD song information as JSON")
helper' :: Parser (a -> a)
helper' :: forall a. Parser (a -> a)
helper' = forall a. Mod OptionFields (a -> a) -> Parser (a -> a)
helperWith
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. HasName f => String -> Mod f a
long String
"help"
forall a. Semigroup a => a -> a -> a
<> forall (f :: * -> *) a. Mod f a
hidden