vimeta-0.3.0.0: src/Vimeta/UI/CommandLine/Config.hs
-- |
--
-- Copyright:
-- This file is part of the package vimeta. It is subject to the
-- license terms in the LICENSE file found in the top-level
-- directory of this distribution and at:
--
-- https://github.com/pjones/vimeta
--
-- No part of this package, including this file, may be copied,
-- modified, propagated, or distributed except according to the terms
-- contained in the LICENSE file.
--
-- License: BSD-2-Clause
module Vimeta.UI.CommandLine.Config
( Options,
optionsParser,
run,
)
where
import qualified Byline.Exit as B
import Options.Applicative
import Vimeta.Core
data Options = Options
{ optsKey :: Maybe Text,
optsTagger :: Tagger
}
optionsParser :: Parser Options
optionsParser =
Options
<$> optional
( strOption $
mconcat
[ short 'k',
long "key",
metavar "KEY",
help "Set the API key to KEY"
]
)
<*> pure AtomicParsley
run :: Options -> IO ()
run opts = do
let def = defaultConfig (optsTagger opts)
config = case optsKey opts of
Nothing -> def
Just k -> def {configTMDBKey = k}
result <- runExceptT (app opts config)
case result of
Left e -> B.die (B.text $ toText e)
Right (Just msg) -> B.warn (B.text $ toText msg)
Right Nothing -> return ()
app :: Options -> Config -> ExceptT String IO (Maybe String)
app opts config = do
filename <- writeConfig config
return $ case optsKey opts of
Just _ -> Nothing -- No warnings.
Nothing -> Just (missingKey filename)
where
missingKey = ("please edit the config file and set the API key: " ++)