Skip to main content

aiproof_cli/
explain.rs

1/// Print bundled rule documentation.
2static EXPLANATIONS: &[(&str, &str)] = &[
3    ("AIP001", include_str!("../rules_docs/AIP001.md")),
4    ("AIP002", include_str!("../rules_docs/AIP002.md")),
5    ("AIP003", include_str!("../rules_docs/AIP003.md")),
6    ("AIP004", include_str!("../rules_docs/AIP004.md")),
7    ("AIP005", include_str!("../rules_docs/AIP005.md")),
8    ("AIP006", include_str!("../rules_docs/AIP006.md")),
9    ("AIP007", include_str!("../rules_docs/AIP007.md")),
10    ("AIP008", include_str!("../rules_docs/AIP008.md")),
11    ("AIP009", include_str!("../rules_docs/AIP009.md")),
12    ("AIP010", include_str!("../rules_docs/AIP010.md")),
13    ("AIP011", include_str!("../rules_docs/AIP011.md")),
14    ("AIP012", include_str!("../rules_docs/AIP012.md")),
15    ("AIP013", include_str!("../rules_docs/AIP013.md")),
16    ("AIP014", include_str!("../rules_docs/AIP014.md")),
17    ("AIP015", include_str!("../rules_docs/AIP015.md")),
18    ("AIP016", include_str!("../rules_docs/AIP016.md")),
19    ("AIP017", include_str!("../rules_docs/AIP017.md")),
20    ("AIP018", include_str!("../rules_docs/AIP018.md")),
21    ("AIP019", include_str!("../rules_docs/AIP019.md")),
22    ("AIP020", include_str!("../rules_docs/AIP020.md")),
23];
24
25pub fn run_explain(code: &str) -> i32 {
26    let upper = code.to_uppercase();
27    match EXPLANATIONS.iter().find(|(c, _)| *c == upper) {
28        Some((_, content)) => {
29            print!("{content}");
30            if !content.ends_with('\n') {
31                println!();
32            }
33            0
34        }
35        None => {
36            eprintln!("aiproof: no rule with code {upper}");
37            eprintln!("(known codes: AIP001..AIP020)");
38            2
39        }
40    }
41}