tauri_plugin_media/
models.rs1use base64::{engine::general_purpose::STANDARD as BASE64, Engine as _};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Deserialize, Serialize)]
5#[serde(rename_all = "camelCase")]
6pub struct MediaMetadata {
7 pub title: String,
8 pub artist: Option<String>,
9 pub album: Option<String>,
10 pub album_artist: Option<String>,
11 pub duration: Option<f64>, pub artwork_url: Option<String>,
13 #[serde(skip_serializing_if = "Option::is_none", with = "base64_serde")]
14 pub artwork_data: Option<Vec<u8>>, }
16
17mod base64_serde {
18 use super::*;
19 use serde::{Deserializer, Serializer};
20
21 pub fn serialize<S>(data: &Option<Vec<u8>>, serializer: S) -> Result<S::Ok, S::Error>
22 where
23 S: Serializer,
24 {
25 match data {
26 Some(bytes) => {
27 let encoded = BASE64.encode(bytes);
28 serializer.serialize_str(&encoded)
29 }
30 None => serializer.serialize_none(),
31 }
32 }
33
34 pub fn deserialize<'de, D>(deserializer: D) -> Result<Option<Vec<u8>>, D::Error>
35 where
36 D: Deserializer<'de>,
37 {
38 let s: Option<String> = Option::deserialize(deserializer)?;
39 match s {
40 Some(encoded) => BASE64
41 .decode(encoded)
42 .map(Some)
43 .map_err(serde::de::Error::custom),
44 None => Ok(None),
45 }
46 }
47}
48
49#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq)]
50#[serde(rename_all = "camelCase")]
51pub enum PlaybackStatus {
52 Playing,
53 Paused,
54 Stopped,
55}
56
57#[derive(Debug, Clone, Deserialize, Serialize)]
58#[serde(rename_all = "camelCase")]
59pub struct PlaybackInfo {
60 pub status: PlaybackStatus,
61 pub position: f64, pub shuffle: bool,
63 pub repeat_mode: RepeatMode,
64 pub playback_rate: f64,
65}
66
67#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq)]
68#[serde(rename_all = "camelCase")]
69pub enum RepeatMode {
70 None,
71 Track,
72 List,
73}
74
75#[derive(Debug, Clone, Deserialize, Serialize)]
76#[serde(rename_all = "camelCase")]
77pub struct MediaControlEvent {
78 pub event_type: MediaControlEventType,
79 pub timestamp: u64,
80}
81
82#[derive(Debug, Clone, Copy, Deserialize, Serialize)]
83#[serde(rename_all = "camelCase")]
84pub enum MediaControlEventType {
85 Play,
86 Pause,
87 PlayPause,
88 Stop,
89 Next,
90 Previous,
91 FastForward,
92 Rewind,
93 SeekTo(f64),
94 SetPosition(f64),
95 SetPlaybackRate(f64),
96}
97
98#[derive(Debug, Clone, Deserialize, Serialize)]
99#[serde(rename_all = "camelCase")]
100pub struct InitializeMediaSessionRequest {
101 pub app_id: String,
102 pub app_name: String,
103}