bluejay_typegen_codegen/
names.rs

1use convert_case::{Case, Casing};
2use proc_macro2::Ident;
3use quote::format_ident;
4
5pub(crate) const ANONYMOUS_OPERATION_STRUCT_NAME: &str = "Root";
6
7pub fn type_name(graphql_name: &str) -> String {
8    graphql_name.to_case(Case::Pascal)
9}
10
11pub fn type_ident(graphql_name: &str) -> Ident {
12    to_ident(&type_name(graphql_name))
13}
14
15pub fn enum_variant_name(graphql_name: &str) -> String {
16    graphql_name.to_case(Case::Pascal)
17}
18
19pub fn enum_variant_ident(graphql_name: &str) -> Ident {
20    to_ident(&enum_variant_name(graphql_name))
21}
22
23pub fn field_name(graphql_name: &str) -> String {
24    graphql_name.to_case(Case::Snake)
25}
26
27pub fn field_ident(graphql_name: &str) -> Ident {
28    to_ident(&field_name(graphql_name))
29}
30
31pub fn module_name(graphql_name: &str) -> String {
32    graphql_name.to_case(Case::Snake)
33}
34
35pub fn module_ident(graphql_name: &str) -> Ident {
36    to_ident(&module_name(graphql_name))
37}
38
39fn to_ident(name: &str) -> Ident {
40    match name {
41        "as" | "break" | "const" | "continue" | "crate" | "else" | "enum" | "extern" | "false"
42        | "fn" | "for" | "if" | "impl" | "in" | "let" | "loop" | "match" | "mod" | "move"
43        | "mut" | "pub" | "ref" | "return" | "self" | "Self" | "static" | "struct" | "super"
44        | "trait" | "true" | "type" | "unsafe" | "use" | "where" | "while" | "async" | "await"
45        | "dyn" | "abstract" | "become" | "box" | "do" | "final" | "macro" | "override"
46        | "priv" | "typeof" | "unsized" | "virtual" | "yield" | "try" | "union" => {
47            format_ident!("r#{}", name)
48        }
49        _ => format_ident!("{}", name),
50    }
51}