use {
crate::types::Error,
async_trait::async_trait,
diagnostics_data::{Data, DiagnosticsData},
serde::Serialize,
std::fmt::Display,
};
#[async_trait]
pub trait Command {
type Result: Serialize + Display;
async fn execute<P: DiagnosticsProvider>(&self, provider: &P) -> Result<Self::Result, Error>;
}
#[async_trait]
pub trait DiagnosticsProvider: Send + Sync {
async fn snapshot<D: DiagnosticsData>(
&self,
accessor: &Option<String>,
selectors: &[String],
) -> Result<Vec<Data<D>>, Error>;
async fn get_accessor_paths(&self) -> Result<Vec<String>, Error>;
}