tauri_plugin_mpv/
models.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3use std::{collections::HashMap, process::Child};
4
5pub struct MpvInstance {
6    pub process: Child,
7    pub ipc_timeout: std::time::Duration,
8}
9
10fn default_mpv_path() -> String {
11    "mpv".to_string()
12}
13
14fn default_ipc_timeout() -> u64 {
15    2000
16}
17
18#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
19#[serde(rename_all = "camelCase")]
20pub struct MpvConfig {
21    #[serde(default = "default_mpv_path")]
22    pub path: String,
23    #[serde(default)]
24    pub args: Vec<String>,
25    #[serde(default)]
26    pub observed_properties: Vec<String>,
27    #[serde(default = "default_ipc_timeout")]
28    pub ipc_timeout_ms: u64,
29    #[serde(default)]
30    pub show_mpv_output: bool,
31}
32#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
33pub struct MpvCommand {
34    pub command: Vec<serde_json::Value>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub request_id: Option<u32>,
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40pub struct MpvCommandResponse {
41    #[serde(skip_serializing_if = "Option::is_none")]
42    pub data: Option<Value>,
43    pub error: String,
44    pub request_id: u32,
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct MpvEvent {
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub event: Option<String>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub name: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub data: Option<Value>,
55    #[serde(flatten)]
56    pub other: HashMap<String, Value>,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
60pub struct VideoMarginRatio {
61    pub left: Option<f64>,
62    pub right: Option<f64>,
63    pub top: Option<f64>,
64    pub bottom: Option<f64>,
65}