tauri_plugin_libmpv/
error.rs

1use 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}