vika_cli/templates/
registry.rs1use std::str::FromStr;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5pub enum TemplateId {
6 TypeInterface,
7 TypeEnum,
8 TypeAlias,
9 ZodSchema,
10 ZodEnum,
11 ApiClientFetch,
12 ReactQueryQuery,
13 ReactQueryMutation,
14 SwrQuery,
15 SwrMutation,
16 QueryKeys,
17 RuntimeTypes,
18 RuntimeHttpClient,
19 RuntimeIndex,
20}
21
22impl TemplateId {
23 pub fn name(self) -> &'static str {
25 match self {
26 TemplateId::TypeInterface => "type-interface",
27 TemplateId::TypeEnum => "type-enum",
28 TemplateId::TypeAlias => "type-alias",
29 TemplateId::ZodSchema => "zod-schema",
30 TemplateId::ZodEnum => "zod-enum",
31 TemplateId::ApiClientFetch => "api-client-fetch",
32 TemplateId::ReactQueryQuery => "hooks/react-query-query",
33 TemplateId::ReactQueryMutation => "hooks/react-query-mutation",
34 TemplateId::SwrQuery => "hooks/swr-query",
35 TemplateId::SwrMutation => "hooks/swr-mutation",
36 TemplateId::QueryKeys => "hooks/query-keys",
37 TemplateId::RuntimeTypes => "runtime/types",
38 TemplateId::RuntimeHttpClient => "runtime/http-client",
39 TemplateId::RuntimeIndex => "runtime/index",
40 }
41 }
42
43 pub fn filename(self) -> String {
45 format!("{}.tera", self.name())
46 }
47
48 pub fn all() -> Vec<TemplateId> {
50 vec![
51 TemplateId::TypeInterface,
52 TemplateId::TypeEnum,
53 TemplateId::TypeAlias,
54 TemplateId::ZodSchema,
55 TemplateId::ZodEnum,
56 TemplateId::ApiClientFetch,
57 TemplateId::ReactQueryQuery,
58 TemplateId::ReactQueryMutation,
59 TemplateId::SwrQuery,
60 TemplateId::SwrMutation,
61 TemplateId::QueryKeys,
62 TemplateId::RuntimeTypes,
63 TemplateId::RuntimeHttpClient,
64 TemplateId::RuntimeIndex,
65 ]
66 }
67}
68
69impl FromStr for TemplateId {
70 type Err = String;
71
72 fn from_str(s: &str) -> Result<Self, Self::Err> {
73 match s {
74 "type-interface" => Ok(TemplateId::TypeInterface),
75 "type-enum" => Ok(TemplateId::TypeEnum),
76 "type-alias" => Ok(TemplateId::TypeAlias),
77 "zod-schema" => Ok(TemplateId::ZodSchema),
78 "zod-enum" => Ok(TemplateId::ZodEnum),
79 "api-client-fetch" => Ok(TemplateId::ApiClientFetch),
80 "hooks/react-query-query" => Ok(TemplateId::ReactQueryQuery),
81 "hooks/react-query-mutation" => Ok(TemplateId::ReactQueryMutation),
82 "hooks/swr-query" => Ok(TemplateId::SwrQuery),
83 "hooks/swr-mutation" => Ok(TemplateId::SwrMutation),
84 "hooks/query-keys" => Ok(TemplateId::QueryKeys),
85 "runtime/types" => Ok(TemplateId::RuntimeTypes),
86 "runtime/http-client" => Ok(TemplateId::RuntimeHttpClient),
87 "runtime/index" => Ok(TemplateId::RuntimeIndex),
88 _ => Err(format!("Unknown template: {}", s)),
89 }
90 }
91}
92
93#[cfg(test)]
94mod tests {
95 use super::*;
96
97 #[test]
98 fn test_template_id_name() {
99 assert_eq!(TemplateId::TypeInterface.name(), "type-interface");
100 assert_eq!(TemplateId::ZodSchema.name(), "zod-schema");
101 }
102
103 #[test]
104 fn test_template_id_filename() {
105 assert_eq!(TemplateId::TypeInterface.filename(), "type-interface.tera");
106 }
107
108 #[test]
109 fn test_template_id_from_str() {
110 assert_eq!(
111 TemplateId::from_str("type-interface").unwrap(),
112 TemplateId::TypeInterface
113 );
114 assert!(TemplateId::from_str("unknown").is_err());
115 }
116
117 #[test]
118 fn test_template_id_all() {
119 let all = TemplateId::all();
120 assert_eq!(all.len(), 14);
121 assert!(all.contains(&TemplateId::TypeInterface));
122 }
123}