{-# LANGUAGE OverloadedStrings, RecordWildCards, ScopedTypeVariables #-}
module Main where
import SphinxEscape (escapeSphinxQueryString, parseQuery)
import System.Environment
import Data.List
import Options.Applicative
import Control.Applicative
import Data.Monoid((<>))
data Options = Options {
optMode :: Mode
, optInput :: Maybe String
}
data Mode = Convert | Parse
mode :: Parser Options
mode = Options
<$> flag Convert Parse (short 'p' <> help "Show parser evaluation")
<*> (
(Just <$> strArgument (metavar "RAW-STRING" <> help "sphinx raw input expression"))
<|> pure Nothing
)
opt :: ParserInfo Options
opt = info (helper <*> mode) (header "sphinxesc")
main = do
Options{..} <- execParser opt
input <- maybe getContents return optInput
case optMode of
Convert -> do
putStrLn $ escapeSphinxQueryString input
Parse -> do
print $ parseQuery input