use std::future::Future;
use std::pin::Pin;
use tokio::sync::mpsc;
pub(crate) mod accumulator;
pub mod error;
pub mod reader;
pub(crate) mod runtime;
pub(crate) mod types;
use crate::sensor::Sensors;
use crate::source::types::{SourceEvent, SourceWorkerHandle};
pub use error::MetricSourceError;
pub use reader::MetricReader;
pub use types::{MetricReaderErrorBound, MetricReaderTypeBound};
pub(crate) trait MetricSource: Send {
fn pre_init(
&mut self,
) -> Pin<Box<dyn Future<Output = Result<(), MetricSourceError>> + Send + '_>>;
fn init(
&mut self,
pid: i32,
) -> Pin<Box<dyn Future<Output = Result<(), MetricSourceError>> + Send + '_>>;
fn run(self: Box<Self>, control_receiver: mpsc::Receiver<SourceEvent>) -> SourceWorkerHandle;
fn list_sensors(&self) -> Result<Sensors, MetricSourceError>;
}