Response Functions

Response Function and Combinators

With a typical request-response cycle intent, the partial function’s return value is of Unfiltered’s type ResponseFunction. A response function takes a response object, presumably mutates it, and returns the same response object.

Unfiltered includes a number of response functions for common response types. Continuing the “record” example, in some cases we may want to respond with a particular string:

case PUT(_) =>
  // ...
  ResponseString("Record created")

We should also set a status code for this response. Fortunately there is a predefined function for this too, and response functions are easily composed. Unfiltered even supplies a chaining combinator ~> to make it pretty:

case PUT(_) =>
  // ...
  Created ~> ResponseString("Record created")

If we had some bytes, they would be as easy to serve as strings:

case GET(_) =>
  // ...

Passing or Handling Errors

And finally, for the case of unexpected methods we have a few choices. One option is to pass on the request:

case _ => Pass

The Pass response function is a signal for the plan act as if the request was not defined for this intent. If no other plan responds to the request, the server may respond with a 404 eror. But we can improve on that by ensuring that any request to this path that is not an expected method receives an appropriate response:

case _ => MethodNotAllowed ~>
            ResponseString("Must be GET or PUT")