RequestIdGenerator

Struct RequestIdGenerator 

Source
pub struct RequestIdGenerator;
Expand description

Request ID generator for distributed tracing and request correlation.

This generator implements the MakeRequestId trait from tower-http to either:

  1. Preserve an existing x-request-id header from the incoming request, or
  2. Generate a new UUIDv7 if no request ID is present

Using UUIDv7 provides several benefits:

  • Time-ordered: IDs are sortable by creation time
  • Unique: Collision-resistant across distributed systems
  • Traceable: Can correlate requests across multiple services

§Request ID Flow

Client Request
    │
    ├─ Has x-request-id header? ─> Preserve it
    │
    └─ No header? ─> Generate new UUIDv7

§Examples

use axum_conf::RequestIdGenerator;
use tower_http::request_id::SetRequestIdLayer;

// Add to your Axum router
let layer = SetRequestIdLayer::x_request_id(RequestIdGenerator);

§Use Cases

  • Distributed Tracing: Track a request across multiple microservices
  • Debugging: Correlate logs from different components of a request
  • Auditing: Track the lifecycle of a request for compliance
  • Monitoring: Measure end-to-end request latency

Trait Implementations§

Source§

impl Clone for RequestIdGenerator

Source§

fn clone(&self) -> RequestIdGenerator

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RequestIdGenerator

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl MakeRequestId for RequestIdGenerator

Source§

fn make_request_id<B>(&mut self, req: &Request<B>) -> Option<RequestId>

Generates or extracts a request ID from an HTTP request.

If the request already has an x-request-id header, that value is preserved. Otherwise, a new UUIDv7 is generated with high-precision timestamp context.

§Arguments
  • req - The HTTP request to process
§Returns

An Option<RequestId> containing either the existing or newly generated ID. Returns None only if UUID generation or header value creation fails (which is extremely rare in practice).

Source§

impl Copy for RequestIdGenerator

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more