1use libpulse_binding::context::State as ContextState;
2
3use super::types::{device::DeviceType, stream::StreamType};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum MissingMonitoringComponent {
8 CancellationToken,
10 EventSender,
12}
13
14impl std::fmt::Display for MissingMonitoringComponent {
15 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
16 match self {
17 Self::CancellationToken => write!(f, "cancellation token"),
18 Self::EventSender => write!(f, "event sender"),
19 }
20 }
21}
22
23#[derive(thiserror::Error, Debug)]
25pub enum Error {
26 #[error("cannot create pulseaudio context")]
28 ContextCreationFailed,
29
30 #[error("cannot connect to pulseaudio server")]
32 ConnectionFailed(#[source] libpulse_binding::error::PAErr),
33
34 #[error("pulseaudio context entered failed state: {0:?}")]
36 ContextStateFailed(ContextState),
37
38 #[error("device {index:?} ({device_type:?}) not found")]
40 DeviceNotFound {
41 index: u32,
43 device_type: DeviceType,
45 },
46
47 #[error("stream {index:?} ({stream_type:?}) not found")]
49 StreamNotFound {
50 index: u32,
52 stream_type: StreamType,
54 },
55
56 #[error("command channel disconnected")]
58 CommandChannelDisconnected,
59
60 #[error("shared data lock poisoned")]
62 LockPoisoned,
63
64 #[error("cannot start monitoring: {0} not available")]
66 MonitoringNotInitialized(MissingMonitoringComponent),
67
68 #[error("cannot connect to dbus session bus")]
70 DbusConnectionFailed(#[source] zbus::Error),
71
72 #[error("cannot register dbus object at {path}")]
74 DbusObjectRegistrationFailed {
75 path: &'static str,
77 #[source]
79 source: zbus::Error,
80 },
81
82 #[error("cannot acquire dbus name {name}")]
84 DbusNameAcquisitionFailed {
85 name: &'static str,
87 #[source]
89 source: zbus::Error,
90 },
91}