use crate::error::OTelSdkResult;
use std::time::Duration;
use std::{fmt, sync::Weak};
use super::{data::ResourceMetrics, instrument::InstrumentKind, pipeline::Pipeline, Temporality};
pub trait MetricReader: fmt::Debug + Send + Sync + 'static {
fn register_pipeline(&self, pipeline: Weak<Pipeline>);
fn collect(&self, rm: &mut ResourceMetrics) -> OTelSdkResult;
fn force_flush(&self) -> OTelSdkResult;
fn shutdown_with_timeout(&self, timeout: Duration) -> OTelSdkResult;
fn shutdown(&self) -> OTelSdkResult {
self.shutdown_with_timeout(Duration::from_secs(5))
}
fn temporality(&self, kind: InstrumentKind) -> Temporality;
}
pub(crate) trait SdkProducer: fmt::Debug + Send + Sync {
fn produce(&self, rm: &mut ResourceMetrics) -> OTelSdkResult;
}