Skip to main content

dealer/
doctor.rs

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}