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 28 29 30 31
use rand::distributions::Alphanumeric; use rand::{thread_rng, Rng}; use tracing::*; use tracing_futures::Instrument; pub async fn request_with_span< Fut: std::future::Future<Output = Result<T, E>>, T, E: std::fmt::Display, >( fut: Fut, ) -> Result<T, E> { let req_id: String = thread_rng().sample_iter(&Alphanumeric).take(10).collect(); let req_id = req_id.as_str(); let span = tracing::error_span!("req", req_id); async move { debug!("Start request [{}]", req_id); fut.await .map_err(|err| { error!("Request error: {}", err); err }) .map(|res| { debug!("Request completed successfully"); res }) } .instrument(span) .await }