aboutsummaryrefslogtreecommitdiffstats
path: root/crates/pseudonyms/src/server/interceptor.rs
blob: ff4631a02ebc0e878ca85fdd3cf1d26c85fd0396 (plain)
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
use tonic::{Status, service::Interceptor};
use tracing::Span;
use warden_stack::{
    opentelemetry::global, tracing::telemetry::tonic::extractor,
    tracing_opentelemetry::OpenTelemetrySpanExt,
};

#[derive(Clone, Copy)]
pub struct MyInterceptor;

impl Interceptor for MyInterceptor {
    fn call(&mut self, request: tonic::Request<()>) -> Result<tonic::Request<()>, Status> {
        let span = Span::current();

        let cx = global::get_text_map_propagator(|propagator| {
            propagator.extract(&extractor::MetadataMap(request.metadata()))
        });

        if let Err(e) = span.set_parent(cx) {
            tracing::error!("{e:?}");
        };

        Ok(request)
    }
}