app_tauri_plugin_player/
models.rs

1use serde::{Deserialize, Serialize};
2use tauri::ipc::Channel;
3
4#[derive(Debug, Deserialize, Serialize)]
5#[serde(rename_all = "camelCase")]
6pub struct Track {
7    pub id: String,
8    pub number: u32,
9    pub title: String,
10    pub album: String,
11    pub album_cover: Option<String>,
12    pub artist: String,
13    pub artist_cover: Option<String>,
14    pub duration: f64,
15}
16
17#[derive(Debug, Deserialize, Serialize)]
18#[serde(rename_all = "camelCase")]
19pub struct Playlist {
20    pub tracks: Vec<Track>,
21}
22
23#[derive(Debug, Deserialize, Serialize)]
24#[serde(rename_all = "camelCase")]
25pub struct UpdateState {
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub playing: Option<bool>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub position: Option<u16>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub seek: Option<f64>,
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub volume: Option<f64>,
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub playlist: Option<Playlist>,
36}
37
38#[derive(Debug, Clone, Default, Deserialize, Serialize)]
39#[serde(rename_all = "camelCase")]
40pub struct StateResponse {}
41
42#[derive(Serialize)]
43#[serde(rename_all = "camelCase")]
44pub struct InitChannel {
45    pub channel: Channel,
46}
47
48#[derive(Debug, Clone, Default, Deserialize, Serialize)]
49#[serde(rename_all = "camelCase")]
50pub struct InitChannelResponse {}
51
52#[derive(Debug, Deserialize, Serialize)]
53#[serde(rename_all = "camelCase")]
54pub struct MediaEvent {
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub play: Option<bool>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub next_track: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub prev_track: Option<bool>,
61}