uv_resolver/resolver/
reporter.rs1use std::sync::Arc;
2
3use uv_distribution_types::{BuildableSource, VersionOrUrlRef};
4use uv_normalize::PackageName;
5use uv_redacted::DisplaySafeUrl;
6
7pub trait Reporter: Send + Sync {
8 fn on_progress(&self, name: &PackageName, version: &VersionOrUrlRef);
10
11 fn on_complete(&self);
13
14 fn on_build_start(&self, source: &BuildableSource) -> usize;
16
17 fn on_build_complete(&self, source: &BuildableSource, id: usize);
19
20 fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize;
22
23 fn on_download_progress(&self, id: usize, bytes: u64);
26
27 fn on_download_complete(&self, name: &PackageName, id: usize);
29
30 fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize;
32
33 fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize);
35}
36
37impl dyn Reporter {
38 pub(crate) fn into_distribution_reporter(
40 self: Arc<dyn Reporter>,
41 ) -> Arc<dyn uv_distribution::Reporter> {
42 Arc::new(Facade {
43 reporter: self.clone(),
44 })
45 }
46}
47
48struct Facade {
50 reporter: Arc<dyn Reporter>,
51}
52
53impl uv_distribution::Reporter for Facade {
54 fn on_build_start(&self, source: &BuildableSource) -> usize {
55 self.reporter.on_build_start(source)
56 }
57
58 fn on_build_complete(&self, source: &BuildableSource, id: usize) {
59 self.reporter.on_build_complete(source, id);
60 }
61
62 fn on_checkout_start(&self, url: &DisplaySafeUrl, rev: &str) -> usize {
63 self.reporter.on_checkout_start(url, rev)
64 }
65
66 fn on_checkout_complete(&self, url: &DisplaySafeUrl, rev: &str, id: usize) {
67 self.reporter.on_checkout_complete(url, rev, id);
68 }
69
70 fn on_download_start(&self, name: &PackageName, size: Option<u64>) -> usize {
71 self.reporter.on_download_start(name, size)
72 }
73
74 fn on_download_progress(&self, id: usize, bytes: u64) {
75 self.reporter.on_download_progress(id, bytes);
76 }
77
78 fn on_download_complete(&self, name: &PackageName, id: usize) {
79 self.reporter.on_download_complete(name, id);
80 }
81}