
Hi Michael and Neil,
Thank you both for replying and for your suggestions. I now have code
that not only typechecks, but seems to actually work!
On 12 February 2011 17:12, Neil Mitchell
What tripped me up was trying to figure out the enumerator part of the API so that I can read the request body (and turn it into a String) and run the XML-RPC request handler. Any help would be appreciated!
The code that I have now works like this:
-- | A WAI application to serve HaXR XML-RPC methods. waiXmlRpcServer :: [(String, XmlRpcMethod)] -> Application waiXmlRpcServer ms req = do -- Get all the input as a String. inp <- consume >>= return . C.unpack . mconcat -- Run the XML-RPC server on the input. outp <- liftIO (handleCall (methods ms) inp) -- Return a response return $ ResponseBuilder status200 [] (fromLazyByteString outp)
No doubt this could be improved (I did write an Iteratee first, but then couldn't figure out how to hook that up properly using the ResponseEnumerator constructor) but I'm just happy to have something that compiles and executes. I can now use:
-- | The function to publish. add :: Int -> Int -> IO Int add x y = return (x + y)
app = waiXmlRpcServer [("example.add", fun add)]
-- | As normal main :: IO () main = run 3000 app
instead of using the CGI interface built in to HaXR Again, thanks for your help! Thomas Sutton