tauri_plugin_typegen/
commands.rs

1use crate::analysis::CommandAnalyzer;
2use crate::generators::generator::BindingsGenerator;
3use crate::models::*;
4use crate::Result;
5
6// Simple ping function for testing (removed Tauri runtime dependency)
7pub 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    // Analyze commands first
29    let commands = analyzer
30        .analyze_project(&payload.project_path)
31        .map_err(|e| crate::Error::CommandAnalysis(e.to_string()))?;
32
33    // Generate TypeScript models with struct information
34    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}