{-# LANGUAGE OverloadedStrings #-} module NLP.GenI.Client where import qualified Data.ByteString as B import Data.Text as T import Data.Text.Encoding as T import Data.Word (Word16) import Network.Http.Client import NLP.GenI import NLP.GenI.Server.Instruction as Geni import System.IO.Streams (InputStream, OutputStream, stdout) import qualified System.IO.Streams as Streams import qualified Text.JSON as Json realise :: B.ByteString -- ^ server -> Word16 -- ^ port -> [String] -- ^ parameters -> T.Text -- ^ semantics -> IO (Json.Result GeniResults) realise server port params sem = do c <- openConnection server port q <- buildRequest $ do http POST "/dump" semStream <- Streams.fromByteString (toJson instr) sendRequest c q (inputStreamBody semStream) resp <- receiveResponse c concatHandler closeConnection c return (fromJson resp) where instr = Geni.ServerInstruction params (T.unpack sem) -- really ought to switch to aeson toJson = T.encodeUtf8 . T.pack . Json.encode fromJson = Json.decode . T.unpack . T.decodeUtf8