tauri_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 plugin connectivity
7#[tauri::command]
8pub fn ping(payload: PingRequest) -> Result<PingResponse> {
9    Ok(PingResponse {
10        value: Some(format!(
11            "Pong: {}",
12            payload.value.unwrap_or_else(|| "Unknown".to_string())
13        )),
14    })
15}
16
17/// Analyzes a Tauri project to discover all commands and their type information
18#[tauri::command]
19pub async fn analyze_commands(payload: AnalyzeCommandsRequest) -> Result<AnalyzeCommandsResponse> {
20    let mut analyzer = CommandAnalyzer::new();
21
22    match analyzer.analyze_project(&payload.project_path) {
23        Ok(commands) => Ok(AnalyzeCommandsResponse { commands }),
24        Err(e) => Err(crate::Error::CommandAnalysis(e.to_string())),
25    }
26}
27
28/// Generates TypeScript models and bindings for a Tauri project
29#[tauri::command]
30pub async fn generate_models(payload: GenerateModelsRequest) -> Result<GenerateModelsResponse> {
31    let mut analyzer = CommandAnalyzer::new();
32
33    // Analyze commands first
34    let commands = analyzer
35        .analyze_project(&payload.project_path)
36        .map_err(|e| crate::Error::CommandAnalysis(e.to_string()))?;
37
38    // Generate TypeScript models with struct information
39    let mut generator = BindingsGenerator::new(payload.validation_library);
40    let output_path = payload
41        .output_path
42        .unwrap_or_else(|| format!("{}/generated", payload.project_path));
43
44    let generated_files = generator
45        .generate_models(
46            &commands,
47            analyzer.get_discovered_structs(),
48            &output_path,
49            &analyzer,
50        )
51        .map_err(|e| crate::Error::CodeGeneration(e.to_string()))?;
52
53    Ok(GenerateModelsResponse {
54        generated_files,
55        commands_found: commands.len() as i32,
56        types_generated: commands.iter().map(|c| c.parameters.len()).sum::<usize>() as i32,
57    })
58}