geni-util-0.24: NLP/GenI/Client.hs
{-# 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