use std::sync::Arc;
use uv_distribution_types::BuildableSource;
use uv_normalize::PackageName;
use uv_redacted::DisplaySafeUrl;
pub trait Reporter: Send + Sync {
fn on_build_start(&self, source: &BuildableSource) -> usize;
fn on_build_complete(&self, source: &BuildableSource, id: usize);
fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize;
fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize);
fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize;
fn on_download_progress(&self, id: usize, inc: u64);
fn on_download_complete(&self, name: &PackageName, id: usize);
}
impl dyn Reporter {
pub(crate) fn into_git_reporter(self: Arc<dyn Reporter>) -> Arc<dyn uv_git::Reporter> {
Arc::new(Facade {
reporter: self.clone(),
})
}
}
struct Facade {
reporter: Arc<dyn Reporter>,
}
impl uv_git::Reporter for Facade {
fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize {
self.reporter.on_checkout_start(url, rev)
}
fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize) {
self.reporter.on_checkout_complete(url, rev, id);
}
}