1use crate::state::DealerState;
2use crate::toolchain::ToolchainSelection;
3
4pub(crate) fn report(toolchain: &ToolchainSelection) -> String {
5 let state = DealerState::from_home(toolchain.dealer_home.clone());
6 format!(
7 "dealer doctor\n\
8dealer_home={}\n\
9auto_update={}\n\
10toolchain_version={}\n\
11toolchain_dir={}\n\
12xtazy_toolchain_complete={}\n\
13piko_source={}\n\
14piko_path={}\n\
15piko_exists={}\n\
16rust_backend_id={}\n\
17rust_backend_dir={}\n\
18rust_backend_source={}\n\
19cargo_path={}\n\
20rusttime_source={}\n\
21rusttime_path={}\n\
22rusttime_exists={}",
23 toolchain.dealer_home.display(),
24 if state.auto_update_enabled() {
25 "enabled"
26 } else {
27 "disabled"
28 },
29 toolchain.version,
30 toolchain.toolchain_dir.display(),
31 state.has_complete_toolchain(&toolchain.version),
32 toolchain.piko_source.as_metadata_value(),
33 toolchain.piko_path.display(),
34 toolchain.piko_path.is_file(),
35 toolchain.rust_backend_id,
36 toolchain.rust_backend_dir.display(),
37 toolchain.backend_source().as_metadata_value(),
38 toolchain.backend.cargo_path.display(),
39 toolchain.rusttime_source.as_metadata_value(),
40 toolchain.rusttime_path.display(),
41 toolchain.rusttime_path.is_dir(),
42 )
43}
44
45#[cfg(test)]
46mod tests {
47 use super::*;
48 use crate::toolchain::{ToolchainEnv, ToolchainSelection};
49
50 #[test]
51 fn report_includes_selected_toolchain_paths() {
52 let workspace_root = crate::workspace_root();
53 let toolchain = ToolchainSelection::discover(
54 &workspace_root,
55 &ToolchainEnv::for_test(Some(workspace_root.join(".dealer-test")), None),
56 );
57
58 let report = report(&toolchain);
59
60 assert!(report.contains("dealer doctor"));
61 assert!(report.contains("auto_update=disabled"));
62 assert!(report.contains("toolchain_version=0.1.0"));
63 assert!(report.contains("xtazy_toolchain_complete=false"));
64 assert!(report.contains("piko_path="));
65 assert!(report.contains("piko_exists="));
66 assert!(report.contains("rust_backend_id="));
67 assert!(report.contains("rusttime_path="));
68 }
69}