opentelemetry-gcloud-trace 0.25.0

OpenTelemetry support for Google Cloud Trace
Documentation
use crate::google_trace_exporter_client::GcpCloudTraceExporterClient;
use crate::TraceExportResult;
use futures::future::TryFutureExt;
use futures::FutureExt;
use opentelemetry_sdk::error::{OTelSdkError, OTelSdkResult};
use opentelemetry_sdk::{
    trace::{SpanData, SpanExporter},
    Resource,
};
use std::fmt::Formatter;
use std::sync::Arc;

pub struct GcpCloudTraceExporter {
    gcp_export_client: Arc<GcpCloudTraceExporterClient>,
}

impl GcpCloudTraceExporter {
    pub async fn new(google_project_id: &str, resource: Resource) -> TraceExportResult<Self> {
        Ok(Self {
            gcp_export_client: Arc::new(
                GcpCloudTraceExporterClient::new(google_project_id, resource).await?,
            ),
        })
    }
}

impl std::fmt::Debug for GcpCloudTraceExporter {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        write!(f, "GcpCloudTraceExporter")
    }
}

impl SpanExporter for GcpCloudTraceExporter {
    fn export(
        &self,
        batch: Vec<SpanData>,
    ) -> impl std::future::Future<Output = OTelSdkResult> + Send {
        let client = self.gcp_export_client.clone();
        async move {
            client
                .export_batch(batch)
                .map_err(|e| OTelSdkError::InternalFailure(e.to_string()))
                .await
        }
        .boxed()
    }
}