{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Main where
import qualified Data.ByteString.Lazy as BL
import Data.Maybe (fromJust)
import Network.MQTT.Client
import Network.MQTT.RPC
import Network.URI
import Options.Applicative (Parser, execParser, fullDesc, help,
helper, info, long, maybeReader, option,
progDesc, short, showDefault, strOption,
value, (<**>))
import System.IO (stdout)
data Options = Options {
optUri :: URI
, optTopic :: Topic
, optMsg :: BL.ByteString
}
options :: Parser Options
options = Options
<$> option (maybeReader parseURI) (long "mqtt-uri" <> short 'u' <> showDefault <> value (fromJust $ parseURI "mqtt://localhost/") <> help "mqtt broker URI")
<*> strOption (long "mqtt-topic" <> short 't' <> showDefault <> value "tmp/rpctest" <> help "MQTT request topic")
<*> strOption (long "mqtt-msg" <> short 'm' <> showDefault <> value "" <> help "Request Message")
run :: Options -> IO ()
run Options{..} = do
mc <- connectURI mqttConfig{_protocol=Protocol50} optUri
BL.hPut stdout =<< call mc optTopic optMsg
main :: IO ()
main = run =<< execParser opts
where opts = info (options <**> helper) (fullDesc <> progDesc "RPC test")