avrogen/generated_schema/
global.rs

1use crate::Result;
2use std::fmt::Write;
3
4pub const RESERVED_NAMES: &[&str] = &[
5  "as",
6  "use",
7  "extern crate",
8  "break",
9  "const",
10  "continue",
11  "crate",
12  "else",
13  "if",
14  "if let",
15  "enum",
16  "extern",
17  "false",
18  "fn",
19  "for",
20  "if",
21  "impl",
22  "in",
23  "for",
24  "let",
25  "loop",
26  "match",
27  "mod",
28  "move",
29  "mut",
30  "pub",
31  "impl",
32  "ref",
33  "return",
34  "Self",
35  "self",
36  "static",
37  "struct",
38  "super",
39  "trait",
40  "true",
41  "type",
42  "unsafe",
43  "use",
44  "where",
45  "while",
46  "abstract",
47  "alignof",
48  "become",
49  "box",
50  "do",
51  "final",
52  "macro",
53  "offsetof",
54  "override",
55  "priv",
56  "proc",
57  "pure",
58  "sizeof",
59  "typeof",
60  "unsized",
61  "virtual",
62  "yield",
63  "dyn", "try", "async", "await", "union" ];
64
65
66  pub fn format_doc(avro_doc: &Option<String>,spaces: &str) -> Result<String> {
67    let mut field_doc= String::from("");
68    if let Some(doc) = avro_doc{
69
70        for line in doc.lines() {
71            write!(field_doc,"{}/// {}\r\n",spaces,line)?;
72        }
73    }
74    Ok(field_doc)
75}
76
77#[derive(Debug)]
78pub struct SanitizedName {
79    pub sanitized_name: String,
80    pub original_name: String,
81    pub is_sanitized: bool,
82}
83
84impl SanitizedName{
85    pub fn from_field(original_name: &str) -> SanitizedName {
86        Self::from(original_name, heck::ToSnekCase::to_snek_case,"field_")
87    }
88
89    pub fn from_module(original_name: &str) -> SanitizedName {
90        Self::from(original_name, heck::ToSnekCase::to_snek_case,"module_")
91    }
92
93    pub fn from_type(original_name: &str) -> SanitizedName {
94        Self::from(original_name, heck::ToUpperCamelCase::to_upper_camel_case,"Type")
95    }
96
97    fn from(original_name: &str,apply_fn:impl Fn(&str) ->String,reserved_name_prefix: &str) -> SanitizedName
98    {
99        let mut sanitized_name = apply_fn(original_name);
100
101        if RESERVED_NAMES.iter().any(|s| *s == sanitized_name) {
102            sanitized_name = format!("{}{}",reserved_name_prefix,sanitized_name);
103        }
104        
105        let is_sanitized= sanitized_name != original_name;
106        SanitizedName{
107            sanitized_name,
108            original_name: original_name.to_string(),
109            is_sanitized}
110    }
111}