packages feed

sphinxesc-0.1.0.0: Main.hs

{-# 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