Skip to main content

allow_report/
migrate.rs

1use crate::contracts::MIGRATE_ARTIFACT;
2use crate::json::{bool_json, push_json_fixed_artifact_preamble};
3use crate::{CLAIM_BOUNDARY_TEXT, MigrateReport};
4use allow_core::json_escape;
5
6pub fn render_migrate_human(report: MigrateReport<'_>) -> String {
7    let mut out = String::new();
8    out.push_str("cargo-allow migrate summary\n");
9    out.push_str(&format!("input_kind: {}\n", report.input_kind));
10    out.push_str(&format!("input: {}\n", report.input_path));
11    out.push_str(&format!("output: {}\n", report.output_path));
12    out.push_str(&format!("force: {}\n", report.force));
13    out.push_str(&format!("allow_entries: {}\n", report.allow_entries));
14    out.push_str(&format!("baseline_debt: {}\n", report.baseline_debt));
15    out.push_str(&format!("unsafe_entries: {}\n", report.unsafe_entries));
16    out.push_str(&format!(
17        "inventory: {}/{} via {}{}\n",
18        report.inventory.scope,
19        report.inventory.scanner,
20        report.inventory.source,
21        migrate_inventory_files_suffix(report.inventory)
22    ));
23    if let Some(root) = report.inventory.root {
24        out.push_str(&format!("source_tree_root: {root}\n"));
25    }
26    out.push_str(report.notes);
27    if !report.notes.ends_with('\n') {
28        out.push('\n');
29    }
30    out.push_str(CLAIM_BOUNDARY_TEXT);
31    out.push('\n');
32    out
33}
34
35fn migrate_inventory_files_suffix(inventory: crate::InventoryContext<'_>) -> String {
36    inventory
37        .files_scanned
38        .map(|files| format!("; files scanned: {files}"))
39        .unwrap_or_default()
40}
41
42pub fn render_migrate_json(report: MigrateReport<'_>) -> String {
43    let mut out = String::new();
44    out.push_str("{\n");
45    push_json_fixed_artifact_preamble(&mut out, MIGRATE_ARTIFACT, report.inventory);
46    out.push_str("  \"input\": {\n");
47    out.push_str(&format!(
48        "    \"kind\": \"{}\",\n",
49        json_escape(report.input_kind)
50    ));
51    out.push_str(&format!(
52        "    \"path\": \"{}\"\n",
53        json_escape(report.input_path)
54    ));
55    out.push_str("  },\n");
56    out.push_str("  \"output\": {\n");
57    out.push_str(&format!(
58        "    \"path\": \"{}\",\n",
59        json_escape(report.output_path)
60    ));
61    out.push_str(&format!("    \"force\": {}\n", bool_json(report.force)));
62    out.push_str("  },\n");
63    out.push_str("  \"summary\": {\n");
64    out.push_str(&format!(
65        "    \"allow_entries\": {},\n",
66        report.allow_entries
67    ));
68    out.push_str(&format!(
69        "    \"baseline_debt\": {},\n",
70        report.baseline_debt
71    ));
72    out.push_str(&format!(
73        "    \"unsafe_entries\": {},\n",
74        report.unsafe_entries
75    ));
76    out.push_str(&format!(
77        "    \"entries_with_evidence\": {}\n",
78        report.entries_with_evidence
79    ));
80    out.push_str("  },\n");
81    out.push_str(&format!("  \"notes\": \"{}\"\n", json_escape(report.notes)));
82    out.push_str("}\n");
83    out
84}