1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
use bytes::Bytes;
/// A `Context` is what will be passed between functions in the middleware for
/// the defined routes of Thruster. Since a new context is made for each
/// incomming request, it's important to keep this struct lean and quick, as
/// well as the `context_generator` associated with it.
pub trait Context {
    type Response: Send;
    /// get_response returns a fully created response object based on the contents
    /// of the Context. This means setting the body according to whatever has been
    /// stored via set_body and/or set_body_bytes, as well as adding the proper
    /// headers that have been added via the set method.
    fn get_response(self) -> Self::Response;
    /// set_body is used to set the body using a vec of bytes on the context. The
    /// contents will be used later for generating the correct response.
    fn set_body(&mut self, body: Vec<u8>);
    /// set_body_byte is used to set the body using a Bytes object on the context.
    /// The contents will be used later for generating the correct response.
    fn set_body_bytes(&mut self, bytes: Bytes);
    /// route is used to return the route from the incoming request as a string.
    fn route(&self) -> &str;
    /// set is used to set a header on the outgoing response.
    fn set(&mut self, key: &str, value: &str);
    /// remove is used to remove a header on the outgoing response.
    fn remove(&mut self, key: &str);
    /// sets the status on the response.
    fn status(&mut self, _status: u16) {
        // Do nothing to not break compat
    }
}