tauri_plugin_typegen/
commands.rs1use crate::analysis::CommandAnalyzer;
2use crate::generators::generator::BindingsGenerator;
3use crate::models::*;
4use crate::Result;
5
6pub fn ping(payload: PingRequest) -> Result<PingResponse> {
8 Ok(PingResponse {
9 value: Some(format!(
10 "Pong: {}",
11 payload.value.unwrap_or_else(|| "Unknown".to_string())
12 )),
13 })
14}
15
16pub async fn analyze_commands(payload: AnalyzeCommandsRequest) -> Result<AnalyzeCommandsResponse> {
17 let mut analyzer = CommandAnalyzer::new();
18
19 match analyzer.analyze_project(&payload.project_path) {
20 Ok(commands) => Ok(AnalyzeCommandsResponse { commands }),
21 Err(e) => Err(crate::Error::CommandAnalysis(e.to_string())),
22 }
23}
24
25pub async fn generate_models(payload: GenerateModelsRequest) -> Result<GenerateModelsResponse> {
26 let mut analyzer = CommandAnalyzer::new();
27
28 let commands = analyzer
30 .analyze_project(&payload.project_path)
31 .map_err(|e| crate::Error::CommandAnalysis(e.to_string()))?;
32
33 let mut generator = BindingsGenerator::new(payload.validation_library);
35 let output_path = payload
36 .output_path
37 .unwrap_or_else(|| format!("{}/generated", payload.project_path));
38
39 let generated_files = generator
40 .generate_models(
41 &commands,
42 analyzer.get_discovered_structs(),
43 &output_path,
44 &analyzer,
45 )
46 .map_err(|e| crate::Error::CodeGeneration(e.to_string()))?;
47
48 Ok(GenerateModelsResponse {
49 generated_files,
50 commands_found: commands.len() as i32,
51 types_generated: commands.iter().map(|c| c.parameters.len()).sum::<usize>() as i32,
52 })
53}