servant-rawm
provides a way to embed a WAI
Application
in a Servant handler. It is more convenient and powerful than the
Raw
type provided by servant
.
See the
Haddocks on Hackage for servant-rawm
for an explanation of how to use the
RawM
type.
After servant-rawm
1.0.0.0, the implementations of the RawM
endpoint are
divided into servant-rawm-client
, servant-rawm-docs
, and
servant-rawm-server
to avoid introducing unnecessary dependencies and reduce
the compilation overhead.
You will need to add either of the implementations to your dependencies, and
import the corresponding implementation (Servant.RawM.Server
,
Servant.RawM.Client
, or Servant.RawM.Docs
) for the RawM
endpoint to
function correctly.
There is code for an example server, client, and documentation located
in servant-rawm-examples-and-tests/example/
. The following section describes how to run the
example executables.
The example executables can be built with the following command:
$ stack build servant-rawm-examples-and-tests
After building, the server can be run with the following command:
$ stack exec -- servant-rawm-example-server
This runs a server on port 8201 serving files
in servant-rawm-examples-and-tests/example/files/
.
It can be accessed from curl
like the following:
$ curl http://localhost:8201/serve-directory/foo.txt
This is an example text file.
After building and running the server, the client can be run like the following:
$ stack exec -- servant-rawm-example-client
Successfully got file ./example/files/foo.txt:
This is an example text file.
After building, the documentation can be generated like the following. This is documentation for the API defined in servant-rawm-examples-and-tests/example/Api.hs:
$ stack exec -- servant-rawm-example-docs
...