use async_trait::async_trait;
use peace_fmt::Presentable;
cfg_if::cfg_if! {
if #[cfg(feature = "output_progress")] {
use peace_core::progress::{ProgressTracker, ProgressUpdateAndId};
use crate::CmdProgressTracker;
}
}
#[async_trait(?Send)]
pub trait OutputWrite<E> {
#[cfg(feature = "output_progress")]
async fn progress_begin(&mut self, cmd_progress_tracker: &CmdProgressTracker);
#[cfg(feature = "output_progress")]
async fn progress_update(
&mut self,
progress_tracker: &ProgressTracker,
progress_update_and_id: &ProgressUpdateAndId,
);
#[cfg(feature = "output_progress")]
async fn progress_end(&mut self, cmd_progress_tracker: &CmdProgressTracker);
async fn present<P>(&mut self, presentable: P) -> Result<(), E>
where
E: std::error::Error,
P: Presentable;
async fn write_err(&mut self, error: &E) -> Result<(), E>
where
E: std::error::Error;
}