tower_web/extract/
context.rs

1use codegen::CallSite;
2use config::Config;
3use routing::{Captures, RouteMatch};
4
5use http::Request;
6
7/// Context available when extracting data from the HTTP request.
8///
9/// Primarily, `Context` includes a reference to the HTTP request in question.
10#[derive(Debug)]
11pub struct Context<'a> {
12    /// Reference too the callsite
13    callsite: &'a CallSite,
14
15    /// Reference to the HTTP request
16    request: &'a Request<()>,
17
18    captures: &'a Captures,
19
20    config: &'a Config,
21}
22
23impl<'a> Context<'a> {
24    // Used as part of codegen, but not part of the public API.
25    #[doc(hidden)]
26    pub fn new(route_match: &'a RouteMatch, callsite: &'a CallSite) -> Context<'a> {
27        let request = route_match.request();
28        let captures = route_match.captures();
29        let config = route_match.config();
30
31        Context {
32            callsite,
33            request,
34            captures,
35            config,
36        }
37    }
38
39    pub(crate) fn callsite(&self) -> &CallSite {
40        self.callsite
41    }
42
43    pub(crate) fn captures(&self) -> &Captures {
44        self.captures
45    }
46
47    /// Returns a reference to the HTTP request from which the data should be
48    /// extracted.
49    pub fn request(&self) -> &Request<()> {
50        &self.request
51    }
52
53    /// Returns the stored configuration value of type `T`.
54    pub fn config<T: Send + Sync + 'static>(&self) -> Option<&T> { self.config.get::<T>() }
55}