aboutsummaryrefslogtreecommitdiffstats
path: root/crates/router/src/processor/grpc.rs
blob: 344f2a18553ff26dd582ddbf361c92e4b047634a (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
26
27
pub mod interceptor {
    use opentelemetry::global;
    use tonic::{
        Status,
        service::{Interceptor, interceptor::InterceptedService},
        transport::Channel,
    };
    use tracing::Span;
    use tracing_opentelemetry::OpenTelemetrySpanExt;
    use warden_stack::tracing::telemetry::tonic::injector;

    pub type Intercepted = InterceptedService<Channel, MyInterceptor>;

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

    impl Interceptor for MyInterceptor {
        fn call(&mut self, mut request: tonic::Request<()>) -> Result<tonic::Request<()>, Status> {
            let cx = Span::current().context();
            global::get_text_map_propagator(|propagator| {
                propagator.inject_context(&cx, &mut injector::MetadataMap(request.metadata_mut()))
            });

            Ok(request)
        }
    }
}