volo_http/server/
span_provider.rs

1//! Utilities for using [`tracing::span!`] for [`Server`]
2//!
3//! [`Server`]: crate::server::Server
4
5use tracing::Span;
6
7use crate::context::ServerContext;
8
9/// Provider for [`Span`].
10///
11/// [`SpanProvider`] will be used as a hook by [`Server`]. When starting to serve a request, the
12/// serve function will call [`SpanProvider::on_serve`] and enter the [`Span`] it returns. When
13/// leaving the serve function scope, [`SpanProvider::leave_serve`] will be called to perform some
14/// operations of [`Span`].
15///
16/// [`Span`]: tracing::Span
17/// [`Server`]: crate::server::Server
18pub trait SpanProvider {
19    /// Handler that will be called when starting to serve a request.
20    ///
21    /// It should return a [`Span`] and the serve function will enter it.
22    fn on_serve(&self, context: &ServerContext) -> Span {
23        let _ = context;
24        Span::none()
25    }
26
27    /// Handler that will be called when leaving the serve function.
28    fn leave_serve(&self, context: &ServerContext) {
29        let _ = context;
30    }
31}
32
33/// Default implementation of [`SpanProvider`] that do nothing.
34#[derive(Debug, Default, Clone)]
35pub struct DefaultProvider;
36
37impl SpanProvider for DefaultProvider {}