J'ai le code suivant;Haskell - génère un message d'erreur d'argument manquant à partir du type de données
module Billing.Options
(
GlobalOpts(..)
, globalOptsParser
, parseDb
, parseSql
) where
import Options.Applicative
import Options.Applicative.Simple
import Options.Applicative.Types
import System.FilePath.Posix
import Text.Regex.PCRE
-- ------------------------------------------------------------
data GlobalOpts = GlobalOpts
{
optDb :: String,
optSql :: String
} deriving Show
-- ------------------------------------------------------------
globalOptsParser :: Parser GlobalOpts
globalOptsParser = GlobalOpts
<$> option (parseDb =<< readerAsk)
( long "db"
<> short 'd'
<> metavar "<DB name>"
<> help "dmt | report"
)
<*> option parseSql
( long "sql"
<> metavar "<SQL SELECT statement>"
<> help "sql select statement to use in order to generate JSON config file"
)
-- ------------------------------------------------------------
matches :: String -> String -> Bool
matches = (=~)
-- ------------------------------------------------------------
parseDb :: String -> ReadM String
parseDb val = do
if not (elem val ["dmt", "report"])
then readerError $ "Unknown DB, '" ++ val ++ "'"
else return val
-- ------------------------------------------------------------
parseSql :: ReadM String
parseSql = do
val <- readerAsk
if not (val `matches` "(?i)select .+ from .+")
then readerError $ "Please provide a valid SQL SELECT statement"
else return val
-- [EOF]
Je suis en train de tester mon analyseur d'arguments avec le code suivant;
error' = let mp = runParser AllowOpts globalOptsParser ["-d", "billing"]
opts = ParserPrefs "suffix" False False False 80
in fst $ runP mp opts
Les arguments sont nécessaires,
-d <DB name>
--sql <SQL SELECT statement>
Je veux vérifier que je reçois le message d'erreur,
Missing: --sql <SQL SELECT statement>
quand je ne précise "facturation -d".
Le code de test ci-dessus donne la sortie suivante si j'imprimer le résultat,
Left (MissingError (MultNode [MultNode [MultNode [AltNode [Leaf (Chunk {unChunk = Just --sql <SQL SELECT statement>})]]]]))
est-il un moyen de générer le message d'erreur attendu (String) du résultat ci-dessus (soit le type de données)? Est-ce que Haskell fournit une fonction évidente à utiliser à cette fin car je ne trouve rien dans la documentation et googler pour des exemples n'a pas non plus produit de réponses.
Il existe des bibliothèques d'options de ligne de commande gazillion pour Haskell, vous devez donc nous indiquer quelle bibliothèque vous utilisez et inclure vos importations. – ErikR
Excuses, j'ai mis à jour ma question. –
@TresiaBurger Alors .... utilisez-vous 'http: // hackage.haskell.org/paquet/optparse-applicative' alors? –