tighterror_build/coder/generator/
helpers.rs1use crate::coder::idents;
2use proc_macro2::{Ident, TokenStream};
3use quote::{format_ident, quote};
4
5fn _handle_multiline_doc(doc: &str) -> String {
6 let n_lines = doc.lines().count();
7 if n_lines <= 1 {
8 if doc.starts_with(' ') {
9 doc.to_owned()
10 } else {
11 format!(" {doc}")
12 }
13 } else {
14 let mut s = String::from("\n");
15 for line in doc.lines() {
16 s.push_str(&format!(" * {}\n", line));
17 }
18 s
19 }
20}
21
22fn _doc_tokens(doc: &str, outer: bool) -> TokenStream {
23 if doc.is_empty() {
24 quote! {}
25 } else {
26 let doc = _handle_multiline_doc(doc);
27 if outer {
28 quote! {
29 #![doc = #doc]
30 }
31 } else {
32 quote! {
33 #[doc = #doc]
34 }
35 }
36 }
37}
38
39pub fn doc_tokens(doc: &str) -> TokenStream {
40 const OUTER: bool = false;
41 _doc_tokens(doc, OUTER)
42}
43
44pub fn outer_doc_tokens(doc: &str) -> TokenStream {
45 const OUTER: bool = true;
46 _doc_tokens(doc, OUTER)
47}
48
49pub fn category_names_mod_ident() -> Ident {
50 format_ident!("{}", idents::CATEGORY_NAMES_MOD)
51}
52
53pub fn error_names_mod_ident() -> Ident {
54 format_ident!("{}", idents::ERROR_NAMES_MOD)
55}
56
57pub fn error_displays_mod_ident() -> Ident {
58 format_ident!("{}", idents::ERROR_DISPLAYS_MOD)
59}
60
61pub fn private_mod_ident() -> Ident {
62 format_ident!("{}", idents::PRIVATE_MOD)
63}
64
65pub fn error_kinds_mod_ident() -> Ident {
66 format_ident!("{}", idents::ERROR_KINDS_MOD)
67}
68
69pub fn tests_mod_ident() -> Ident {
70 format_ident!("{}", idents::TESTS_MOD)
71}
72
73pub fn categories_mod_ident() -> Ident {
74 format_ident!("{}", idents::CATEGORY_CONSTS_MOD)
75}
76
77pub fn variants_mod_ident() -> Ident {
78 format_ident!("{}", idents::VARIANTS_MOD)
79}
80
81pub fn types_mod_ident() -> Ident {
82 format_ident!("{}", idents::TYPES_MOD)
83}