1static 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}