tauri_plugin_typegen/
generator.rs1use crate::analyzer::CommandAnalyzer;
2use crate::generators::{VanillaTypeScriptGenerator, ZodGenerator};
3use crate::models::{CommandInfo, StructInfo};
4use std::collections::HashMap;
5
6pub struct TypeScriptGenerator {
7 validation_library: String,
8}
9
10impl TypeScriptGenerator {
11 pub fn new(validation_library: Option<String>) -> Self {
12 Self {
13 validation_library: validation_library.unwrap_or_else(|| "zod".to_string()),
14 }
15 }
16
17 pub fn generate_models(
18 &mut self,
19 commands: &[CommandInfo],
20 discovered_structs: &HashMap<String, StructInfo>,
21 output_path: &str,
22 analyzer: &CommandAnalyzer,
23 ) -> Result<Vec<String>, Box<dyn std::error::Error>> {
24 match self.validation_library.as_str() {
25 "zod" => {
26 let mut generator = ZodGenerator::new();
27 generator.generate_models(commands, discovered_structs, output_path, analyzer)
28 }
29 "none" => {
30 let mut generator = VanillaTypeScriptGenerator::new();
31 generator.generate_models(commands, discovered_structs, output_path, analyzer)
32 }
33 _ => {
34 let mut generator = VanillaTypeScriptGenerator::new();
36 generator.generate_models(commands, discovered_structs, output_path, analyzer)
37 }
38 }
39 }
40
41 pub fn to_pascal_case(&self, s: &str) -> String {
43 match self.validation_library.as_str() {
44 "zod" => {
45 let generator = ZodGenerator::new();
46 generator.to_pascal_case(s)
47 }
48 _ => {
49 let generator = VanillaTypeScriptGenerator::new();
50 generator.to_pascal_case(s)
51 }
52 }
53 }
54
55 pub fn to_camel_case(&self, s: &str) -> String {
56 match self.validation_library.as_str() {
57 "zod" => {
58 let generator = ZodGenerator::new();
59 generator.to_camel_case(s)
60 }
61 _ => {
62 let generator = VanillaTypeScriptGenerator::new();
63 generator.to_camel_case(s)
64 }
65 }
66 }
67
68 pub fn collect_referenced_types(&self, rust_type: &str, used_types: &mut std::collections::HashSet<String>) {
69 match self.validation_library.as_str() {
70 "zod" => {
71 let generator = ZodGenerator::new();
72 generator.collect_referenced_types(rust_type, used_types)
73 }
74 _ => {
75 let generator = VanillaTypeScriptGenerator::new();
76 generator.collect_referenced_types(rust_type, used_types)
77 }
78 }
79 }
80
81 pub fn typescript_to_zod_type(&self, ts_type: &str) -> String {
82 let generator = ZodGenerator::new();
83 generator.typescript_to_zod_type(ts_type)
84 }
85
86 pub fn typescript_to_yup_type(&self, ts_type: &str) -> String {
87 format!("yup.mixed() /* {} - yup support removed */", ts_type)
89 }
90
91 pub fn is_custom_type(&self, ts_type: &str) -> bool {
92 match self.validation_library.as_str() {
93 "zod" => {
94 let generator = ZodGenerator::new();
95 generator.is_custom_type(ts_type)
96 }
97 _ => {
98 let generator = VanillaTypeScriptGenerator::new();
99 generator.is_custom_type(ts_type)
100 }
101 }
102 }
103}