fireblocks-sdk 2026.3.28

Rust implementation of the Fireblocks SDK
Documentation
use {
    http::Extensions,
    reqwest::{Request, Response},
    reqwest_middleware::{Middleware, Next, Result},
    tracing::Level,
};

pub struct LoggingMiddleware;

#[async_trait::async_trait]
impl Middleware for LoggingMiddleware {
    async fn handle(
        &self,
        req: Request,
        extensions: &mut Extensions,
        next: Next<'_>,
    ) -> Result<Response> {
        let span = tracing::span!(
            Level::INFO,
            "request",
            method = req.method().to_string(),
            path = req.url().path().to_string(),
            params = req.url().query().unwrap_or_default(),
            requestId = tracing::field::Empty
        );
        let _enter = span.enter();
        tracing::debug!("request started {:?}", req);
        let response = next.run(req, extensions).await;
        if let Ok(response) = &response {
            let request_id = response
                .headers()
                .get("x-request-id")
                .and_then(|value| value.to_str().ok())
                .unwrap_or_default()
                .to_string();
            span.record("requestId", &request_id);
        }
        response
    }
}