aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CliOptions.hs15
-rw-r--r--src/I18n.hs2
2 files changed, 13 insertions, 4 deletions
diff --git a/src/CliOptions.hs b/src/CliOptions.hs
index 60f05ad..9d8baf6 100644
--- a/src/CliOptions.hs
+++ b/src/CliOptions.hs
@@ -7,11 +7,20 @@ module CliOptions
import Data.Semigroup ((<>))
import Options.Applicative
+import I18n (Locale(EN, FR))
+
data Options = Options
{ slackApiToken :: String
- , language :: String
+ , language :: Locale
}
+-- | Parse the language command line option string into a `Locale` type
+parseLanguage :: ReadM Locale
+parseLanguage = eitherReader $ \s -> case s of
+ "en" -> Right EN
+ "fr" -> Right FR
+ _ -> Left "Unrecognised language code"
+
options :: Parser Options
options = Options
<$> strOption
@@ -19,11 +28,11 @@ options = Options
<> metavar "TOKEN"
<> value ""
<> help "Token to access Slack's real-time messaging API" )
- <*> strOption
+ <*> option parseLanguage
( long "language"
<> short 'l'
<> metavar "en"
- <> value "en"
+ <> value EN
<> help "Set the language Sorbot will speak in (en | fr)" )
parseOptions :: IO Options
diff --git a/src/I18n.hs b/src/I18n.hs
index 5a74d80..e50ba5b 100644
--- a/src/I18n.hs
+++ b/src/I18n.hs
@@ -9,7 +9,7 @@ module I18n
import qualified Data.Text as T
-data Locale = EN | FR
+data Locale = EN | FR deriving (Show)
data Message
= GitHubCommitRepoURLNotFound