apisdk 0.0.15-beta.2

An easy-to-use API toolkit for writing HTTP API Clients for Rust.
Documentation
#[cfg(feature = "opentelemetry_0_24")]
mod opentelemetry_0_24 {
    pub use opentelemetry_0_24_pkg::trace::*;
    pub use opentelemetry_0_24_pkg::KeyValue;
}

#[cfg(feature = "opentelemetry_0_24")]
pub use opentelemetry_0_24::*;

#[cfg(feature = "opentelemetry_0_25")]
mod opentelemetry_0_25 {
    pub use opentelemetry_0_25_pkg::trace::*;
    pub use opentelemetry_0_25_pkg::KeyValue;
}

#[cfg(feature = "opentelemetry_0_25")]
pub use opentelemetry_0_25::*;

#[cfg(feature = "opentelemetry_0_26")]
mod opentelemetry_0_26 {
    pub use opentelemetry_0_26_pkg::trace::*;
    pub use opentelemetry_0_26_pkg::KeyValue;
}

#[cfg(feature = "opentelemetry_0_26")]
pub use opentelemetry_0_26::*;

use http::Extensions;
use reqwest::{Request, Response};
use reqwest_middleware::{Error, Next};

pub struct OtelMiddleware {
    pub name: String,
}

#[async_trait::async_trait]
impl crate::Middleware for OtelMiddleware {
    async fn handle(
        &self,
        req: Request,
        extensions: &mut Extensions,
        next: Next<'_>,
    ) -> Result<Response, Error> {
        use crate::otel::*;
        get_active_span(|span| {
            span.add_event(
                self.name.clone(),
                vec![KeyValue::new("otel-middleware", self.name.clone())],
            );
        });
        next.run(req, extensions).await
    }
}