Context can be built from request information by implementing the following trait. The
extensions are passed in from the request (see Extensions), which can be added using tower
middleware.
Registration implementation differs depending on the return type of the handler. This
is to account for handlers which may return futures, streams, or values directly.