pub struct ConnId { /* private fields */ }Expand description
Trillium handler to set a identifier for every Conn.
By default, it will use an inbound x-request-id request header or if
that is missing, populate a ten character random id. This handler will
set an outbound x-request-id header as well by default. All of this
behavior can be customized with ConnId::with_request_header,
ConnId::with_response_header and ConnId::with_id_generator
Implementations§
Source§impl ConnId
impl ConnId
Sourcepub fn new() -> Self
pub fn new() -> Self
Constructs a new ConnId handler
let app = TestServer::new((ConnId::new().with_seed(1000), "ok")).await;
app.get("/")
.await
.assert_ok()
.assert_body("ok")
.assert_header("x-request-id", "J4lzoPXcT5");
app.get("/")
.with_request_header("x-request-id", "inbound")
.await
.assert_ok()
.assert_header("x-request-id", "inbound");Sourcepub fn with_request_header(
self,
request_header: impl Into<HeaderName<'static>>,
) -> Self
pub fn with_request_header( self, request_header: impl Into<HeaderName<'static>>, ) -> Self
Specifies a request header to use. If this header is provided on
the inbound request, the id will be used unmodified. To disable
this behavior, see ConnId::without_request_header
let app = TestServer::new((ConnId::new().with_request_header("x-custom-id"), "ok")).await;
app.get("/")
.with_request_header("x-custom-id", "inbound")
.await
.assert_ok()
.assert_header("x-request-id", "inbound");Sourcepub fn without_request_header(self) -> Self
pub fn without_request_header(self) -> Self
disables the default behavior of reusing an inbound header for
the request id. If a ConnId is configured
without_request_header, a new id will always be generated
Sourcepub fn with_response_header(
self,
response_header: impl Into<HeaderName<'static>>,
) -> Self
pub fn with_response_header( self, response_header: impl Into<HeaderName<'static>>, ) -> Self
Specifies a response header to set. To disable this behavior, see
ConnId::without_response_header
let app = TestServer::new((
ConnId::new()
.with_seed(1000)
.with_response_header("x-custom-header"),
"ok",
))
.await;
app.get("/")
.await
.assert_ok()
.assert_header("x-custom-header", "J4lzoPXcT5");Sourcepub fn without_response_header(self) -> Self
pub fn without_response_header(self) -> Self
Disables the default behavior of sending the conn id as a response
header. A request id will be available within the application
through use of ConnIdExt but will not be sent as part of the
response.
Sourcepub fn with_id_generator<F>(self, id_generator: F) -> Self
pub fn with_id_generator<F>(self, id_generator: F) -> Self
Provide an alternative generator function for ids. The default is a ten-character alphanumeric random sequence.
let app = TestServer::new((
ConnId::new().with_id_generator(|| Uuid::new_v4().to_string()),
"ok",
))
.await;
app.get("/")
.await
.assert_header_with("x-request-id", |header| {
assert!(Uuid::parse_str(header.as_str().unwrap()).is_ok());
});Trait Implementations§
Source§impl Handler for ConnId
impl Handler for ConnId
Source§async fn run(&self, conn: Conn) -> Conn
async fn run(&self, conn: Conn) -> Conn
Source§fn init(&mut self, info: &mut Info) -> impl Future<Output = ()> + Send
fn init(&mut self, info: &mut Info) -> impl Future<Output = ()> + Send
Source§fn before_send(&self, conn: Conn) -> impl Future<Output = Conn> + Send
fn before_send(&self, conn: Conn) -> impl Future<Output = Conn> + Send
Source§fn has_upgrade(&self, upgrade: &Upgrade) -> bool
fn has_upgrade(&self, upgrade: &Upgrade) -> bool
Handler::upgrade. The first handler that responds true to this will receive
ownership of the trillium::Upgrade in a subsequent call to
Handler::upgradeSource§fn upgrade(&self, upgrade: Upgrade) -> impl Future<Output = ()> + Send
fn upgrade(&self, upgrade: Upgrade) -> impl Future<Output = ()> + Send
Handler::has_upgrade and will
only be called once for this upgrade. There is no return value, and this function takes
exclusive ownership of the underlying transport once this is called. You can downcast
the transport to whatever the source transport type is and perform any non-http protocol
communication that has been negotiated. You probably don’t want this unless you’re
implementing something like websockets. Please note that for many transports such as
TcpStreams, dropping the transport (and therefore the Upgrade) will hang up /
disconnect.