1mod broken_doc_link;
2mod duplicate_import;
3mod non_camel_case_enum;
4mod non_camel_case_enum_variant;
5mod non_camel_case_newtype;
6mod non_camel_case_service;
7mod non_camel_case_struct;
8mod non_shouty_snake_case_const;
9mod non_snake_case_event;
10mod non_snake_case_function;
11mod non_snake_case_schema_name;
12mod non_snake_case_struct_field;
13mod reserved_ident;
14mod reserved_schema_name;
15mod unused_import;
16
17use crate::diag::{Diagnostic, DiagnosticKind, Renderer};
18use crate::Parser;
19
20pub(crate) use broken_doc_link::BrokenDocLink;
21pub(crate) use duplicate_import::DuplicateImport;
22pub(crate) use non_camel_case_enum::NonCamelCaseEnum;
23pub(crate) use non_camel_case_enum_variant::NonCamelCaseEnumVariant;
24pub(crate) use non_camel_case_newtype::NonCamelCaseNewtype;
25pub(crate) use non_camel_case_service::NonCamelCaseService;
26pub(crate) use non_camel_case_struct::NonCamelCaseStruct;
27pub(crate) use non_shouty_snake_case_const::NonShoutySnakeCaseConst;
28pub(crate) use non_snake_case_event::NonSnakeCaseEvent;
29pub(crate) use non_snake_case_function::NonSnakeCaseFunction;
30pub(crate) use non_snake_case_schema_name::NonSnakeCaseSchemaName;
31pub(crate) use non_snake_case_struct_field::NonSnakeCaseStructField;
32pub(crate) use reserved_ident::ReservedIdent;
33pub(crate) use reserved_schema_name::ReservedSchemaName;
34pub(crate) use unused_import::UnusedImport;
35
36#[derive(Debug)]
37pub struct Warning {
38 kind: WarningKind,
39}
40
41impl Diagnostic for Warning {
42 fn kind(&self) -> DiagnosticKind {
43 DiagnosticKind::Warning
44 }
45
46 fn schema_name(&self) -> &str {
47 self.kind.schema_name()
48 }
49
50 fn render(&self, renderer: &Renderer, parser: &Parser) -> String {
51 self.kind.render(renderer, parser)
52 }
53}
54
55#[derive(Debug)]
56enum WarningKind {
57 BrokenDocLink(BrokenDocLink),
58 DuplicateImport(DuplicateImport),
59 NonCamelCaseEnum(NonCamelCaseEnum),
60 NonCamelCaseEnumVariant(NonCamelCaseEnumVariant),
61 NonCamelCaseNewtype(NonCamelCaseNewtype),
62 NonCamelCaseService(NonCamelCaseService),
63 NonCamelCaseStruct(NonCamelCaseStruct),
64 NonShoutySnakeCaseConst(NonShoutySnakeCaseConst),
65 NonSnakeCaseEvent(NonSnakeCaseEvent),
66 NonSnakeCaseFunction(NonSnakeCaseFunction),
67 NonSnakeCaseSchemaName(NonSnakeCaseSchemaName),
68 NonSnakeCaseStructField(NonSnakeCaseStructField),
69 ReservedIdent(ReservedIdent),
70 ReservedSchemaName(ReservedSchemaName),
71 UnusedImport(UnusedImport),
72}
73
74impl Diagnostic for WarningKind {
75 fn kind(&self) -> DiagnosticKind {
76 DiagnosticKind::Warning
77 }
78
79 fn schema_name(&self) -> &str {
80 match self {
81 Self::BrokenDocLink(w) => w.schema_name(),
82 Self::DuplicateImport(w) => w.schema_name(),
83 Self::NonCamelCaseEnum(w) => w.schema_name(),
84 Self::NonCamelCaseEnumVariant(w) => w.schema_name(),
85 Self::NonCamelCaseNewtype(w) => w.schema_name(),
86 Self::NonCamelCaseService(w) => w.schema_name(),
87 Self::NonCamelCaseStruct(w) => w.schema_name(),
88 Self::NonShoutySnakeCaseConst(w) => w.schema_name(),
89 Self::NonSnakeCaseEvent(w) => w.schema_name(),
90 Self::NonSnakeCaseFunction(w) => w.schema_name(),
91 Self::NonSnakeCaseSchemaName(w) => w.schema_name(),
92 Self::NonSnakeCaseStructField(w) => w.schema_name(),
93 Self::ReservedIdent(w) => w.schema_name(),
94 Self::ReservedSchemaName(w) => w.schema_name(),
95 Self::UnusedImport(w) => w.schema_name(),
96 }
97 }
98
99 fn render(&self, renderer: &Renderer, parser: &Parser) -> String {
100 match self {
101 Self::BrokenDocLink(w) => w.render(renderer, parser),
102 Self::DuplicateImport(w) => w.render(renderer, parser),
103 Self::NonCamelCaseEnum(w) => w.render(renderer, parser),
104 Self::NonCamelCaseEnumVariant(w) => w.render(renderer, parser),
105 Self::NonCamelCaseNewtype(w) => w.render(renderer, parser),
106 Self::NonCamelCaseService(w) => w.render(renderer, parser),
107 Self::NonCamelCaseStruct(w) => w.render(renderer, parser),
108 Self::NonShoutySnakeCaseConst(w) => w.render(renderer, parser),
109 Self::NonSnakeCaseEvent(w) => w.render(renderer, parser),
110 Self::NonSnakeCaseFunction(w) => w.render(renderer, parser),
111 Self::NonSnakeCaseSchemaName(w) => w.render(renderer, parser),
112 Self::NonSnakeCaseStructField(w) => w.render(renderer, parser),
113 Self::ReservedIdent(w) => w.render(renderer, parser),
114 Self::ReservedSchemaName(w) => w.render(renderer, parser),
115 Self::UnusedImport(w) => w.render(renderer, parser),
116 }
117 }
118}