tauri_plugin_libmpv/
error.rs1use serde::{ser::Serializer, Serialize};
2
3pub type Result<T> = std::result::Result<T, Error>;
4
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
7 #[error(transparent)]
8 Io(#[from] std::io::Error),
9 #[cfg(mobile)]
10 #[error(transparent)]
11 PluginInvoke(#[from] tauri::plugin::mobile::PluginInvokeError),
12 #[error("Unsupported platform for mpv integration")]
13 UnsupportedPlatform,
14 #[error("Failed to get window handle")]
15 WindowHandleError,
16 #[error("A libmpv error occurred: {0}")]
17 Mpv(String),
18 #[error("mpv initialization failed: {0}")]
19 Initialization(String),
20 #[error("Failed to create mpv client: {0}")]
21 ClientCreation(String),
22 #[error("Command Error: {0}")]
23 Command(String),
24 #[error("Set Property Error: {0}")]
25 SetProperty(String),
26 #[error("Get Property Error: {0}")]
27 GetProperty(String),
28 #[error("Invalid format string provided: {0}")]
29 Format(String),
30}
31
32impl From<libmpv2::Error> for Error {
33 fn from(e: libmpv2::Error) -> Self {
34 let error_string = match e {
35 libmpv2::Error::Raw(code) => {
36 let error_name = mpv_error_code_to_name(code);
37 format!("{} ({})", error_name, code)
38 }
39 _ => e.to_string(),
40 };
41 Error::Mpv(error_string)
42 }
43}
44
45impl Serialize for Error {
46 fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
47 where
48 S: Serializer,
49 {
50 serializer.serialize_str(self.to_string().as_ref())
51 }
52}
53
54pub fn mpv_error_code_to_name(code: i32) -> &'static str {
55 use libmpv2::mpv_error;
56 match code {
57 mpv_error::Success => "Success",
58 mpv_error::EventQueueFull => "EventQueueFull",
59 mpv_error::NoMem => "NoMem",
60 mpv_error::Uninitialized => "Uninitialized",
61 mpv_error::InvalidParameter => "InvalidParameter",
62 mpv_error::OptionNotFound => "OptionNotFound",
63 mpv_error::OptionFormat => "OptionFormat",
64 mpv_error::OptionError => "OptionError",
65 mpv_error::PropertyNotFound => "PropertyNotFound",
66 mpv_error::PropertyFormat => "PropertyFormat",
67 mpv_error::PropertyUnavailable => "PropertyUnavailable",
68 mpv_error::PropertyError => "PropertyError",
69 mpv_error::Command => "Command",
70 mpv_error::LoadingFailed => "LoadingFailed",
71 mpv_error::AoInitFailed => "AoInitFailed",
72 mpv_error::VoInitFailed => "VoInitFailed",
73 mpv_error::NothingToPlay => "NothingToPlay",
74 mpv_error::UnknownFormat => "UnknownFormat",
75 mpv_error::Unsupported => "Unsupported",
76 mpv_error::NotImplemented => "NotImplemented",
77 mpv_error::Generic => "Generic",
78 _ => "UnknownErrorCode",
79 }
80}