avrogen/generated_schema/
global.rs1use 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}