tauri_plugin_use_ffmpeg/
models.rs

1//! # Models
2//!
3//! 定义插件使用的数据结构和类型。
4
5use serde::{Deserialize, Serialize};
6
7/// FFmpeg 下载配置
8#[derive(Debug, Clone, Deserialize, Serialize)]
9#[serde(rename_all = "camelCase")]
10pub struct DownloadConfig {
11    /// 下载 URL
12    pub url: String,
13    /// 解压后 FFmpeg 可执行文件的相对路径
14    pub executable_path: String,
15}
16
17/// 下载请求
18#[derive(Debug, Deserialize, Serialize)]
19#[serde(rename_all = "camelCase")]
20pub struct DownloadRequest {
21    /// 可选的下载配置,如果为 None 则使用默认配置
22    pub config: Option<DownloadConfig>,
23}
24
25/// 下载响应
26#[derive(Debug, Clone, Deserialize, Serialize)]
27#[serde(rename_all = "camelCase")]
28pub struct DownloadResponse {
29    /// 是否成功
30    pub success: bool,
31    /// 下载后的文件路径
32    pub path: Option<String>,
33    /// 消息
34    pub message: Option<String>,
35}
36
37/// 检查响应
38#[derive(Debug, Clone, Deserialize, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct CheckResponse {
41    /// FFmpeg 是否可用
42    pub available: bool,
43    /// FFmpeg 可执行文件路径
44    pub path: Option<String>,
45    /// FFmpeg 版本信息
46    pub version: Option<String>,
47}
48
49/// 执行请求
50#[derive(Debug, Clone, Deserialize, Serialize)]
51#[serde(rename_all = "camelCase")]
52pub struct ExecuteRequest {
53    /// FFmpeg 命令参数(不包含 ffmpeg 本身)
54    pub args: Vec<String>,
55}
56
57/// 执行响应
58#[derive(Debug, Clone, Deserialize, Serialize)]
59#[serde(rename_all = "camelCase")]
60pub struct ExecuteResponse {
61    /// 是否成功
62    pub success: bool,
63    /// 标准输出
64    pub stdout: String,
65    /// 标准错误输出
66    pub stderr: String,
67    /// 退出码
68    pub exit_code: Option<i32>,
69}
70
71/// 下载进度
72#[derive(Debug, Clone, Deserialize, Serialize)]
73#[serde(rename_all = "camelCase")]
74pub struct DownloadProgress {
75    /// 已下载字节数
76    pub downloaded: u64,
77    /// 总字节数(如果已知)
78    pub total: Option<u64>,
79    /// 下载百分比(如果已知)
80    pub percentage: Option<f64>,
81}
82
83/// 删除响应
84#[derive(Debug, Clone, Deserialize, Serialize)]
85#[serde(rename_all = "camelCase")]
86pub struct DeleteResponse {
87    /// 是否成功
88    pub success: bool,
89    /// 消息
90    pub message: Option<String>,
91}