uv_distribution/
reporter.rs

1use std::sync::Arc;
2
3use uv_distribution_types::BuildableSource;
4use uv_normalize::PackageName;
5use uv_redacted::DisplaySafeUrl;
6
7pub trait Reporter: Send + Sync {
8    /// Callback to invoke when a source distribution build is kicked off.
9    fn on_build_start(&self, source: &BuildableSource) -> usize;
10
11    /// Callback to invoke when a source distribution build is complete.
12    fn on_build_complete(&self, source: &BuildableSource, id: usize);
13
14    /// Callback to invoke when a repository checkout begins.
15    fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize;
16
17    /// Callback to invoke when a repository checkout completes.
18    fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize);
19
20    /// Callback to invoke when a download is kicked off.
21    fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize;
22
23    /// Callback to invoke when a download makes progress (i.e. some number of bytes are
24    /// downloaded).
25    fn on_download_progress(&self, id: usize, inc: u64);
26
27    /// Callback to invoke when a download is complete.
28    fn on_download_complete(&self, name: &PackageName, id: usize);
29}
30
31impl dyn Reporter {
32    /// Converts this reporter to a [`uv_git::Reporter`].
33    pub(crate) fn into_git_reporter(self: Arc<dyn Reporter>) -> Arc<dyn uv_git::Reporter> {
34        Arc::new(Facade {
35            reporter: self.clone(),
36        })
37    }
38}
39
40/// A facade for converting from [`Reporter`] to [`uv_git::Reporter`].
41struct Facade {
42    reporter: Arc<dyn Reporter>,
43}
44
45impl uv_git::Reporter for Facade {
46    fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize {
47        self.reporter.on_checkout_start(url, rev)
48    }
49
50    fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize) {
51        self.reporter.on_checkout_complete(url, rev, id);
52    }
53}