human-friendly-id-gen/src-exe/Main.hs
2018-09-04 10:53:34 +02:00

47 lines
1.9 KiB
Haskell

module Main where
import Protolude hiding (FilePath, die)
import Turtle
import qualified HFIG.Dictionary as Dict
import qualified HFIG.Lovecraftian as Lovecraftian
import qualified HFIG.Short as Short
main :: IO ()
main = do
opts <- options "Generate Human Friendly identifiers" optParser
case genMode opts of
Short -> Short.idgen 8 >>= putText
Lovecraftian -> Lovecraftian.idgen 2 >>= putText
Dict -> do
let file = case optDict opts of
Just "english" -> "dictionaries/english.txt"
Just "first-names" -> "dictionaries/first-names.txt"
Just "generic" -> "dictionaries/generic.txt"
Just "literary" -> "dictionaries/literary.txt"
Just filepath -> toS (format fp filepath)
Nothing -> "dictionaries/english.txt"
dict <- Dict.dictionaryFromFile file
Dict.idgen dict (fromMaybe 3 (optLen opts)) >>= putText
-- Option parsing
data GenMode = Short | Lovecraftian | Dict deriving (Eq)
data AppOptions = AppOptions { genMode :: GenMode
, optDict :: Maybe FilePath
, optLen :: Maybe Int
}
optParser :: Parser AppOptions
optParser = AppOptions
<$> (fromMaybe Lovecraftian <$> optional (opt toGenMode "gen" 'g' "Possible values: short, dict"))
<*> optional (optPath "dict" 'd' "dictionary (predefined names are: english, first-names, generic, literary) or use any file path (one word per line)")
<*> optional (optInt "len" 'n' "complexity depends on the gen chosen")
toGenMode :: Text -> Maybe GenMode
toGenMode "s" = Just Short
toGenMode "short" = Just Short
toGenMode "d" = Just Dict
toGenMode "dict" = Just Dict
toGenMode "dictionary" = Just Dict
toGenMode _ = Nothing