#![warn(missing_docs)]
#![deny(
missing_debug_implementations,
missing_copy_implementations,
trivial_casts,
trivial_numeric_casts,
unsafe_code,
unreachable_pub,
unstable_features,
unused_import_braces,
unused_qualifications
)]
use thiserror::Error;
mod extensions;
#[allow(unreachable_pub, dead_code)]
mod generated;
mod event;
mod find;
mod metadata;
mod player;
mod pooled_connection;
mod progress;
mod track_list;
pub use crate::event::{Event, EventError, PlayerEvents};
pub use crate::find::{FindingError, PlayerFinder, PlayerIter};
pub use crate::metadata::Metadata;
pub use crate::metadata::Value as MetadataValue;
pub use crate::metadata::ValueKind as MetadataValueKind;
pub use crate::player::Player;
pub use crate::progress::{Progress, ProgressError, ProgressTick, ProgressTracker};
pub use crate::track_list::{TrackID, TrackList, TrackListError};
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
#[allow(missing_docs)]
pub enum PlaybackStatus {
Playing,
Paused,
Stopped,
}
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum LoopStatus {
None,
Track,
Playlist,
}
#[derive(Debug, Error)]
#[error("PlaybackStatus must be one of Playing, Paused, Stopped, but was {0}")]
pub struct InvalidPlaybackStatus(String);
impl ::std::str::FromStr for PlaybackStatus {
type Err = InvalidPlaybackStatus;
fn from_str(string: &str) -> Result<Self, Self::Err> {
use crate::PlaybackStatus::*;
match string {
"Playing" => Ok(Playing),
"Paused" => Ok(Paused),
"Stopped" => Ok(Stopped),
other => Err(InvalidPlaybackStatus(other.to_string())),
}
}
}
#[derive(Debug, Error)]
#[error("LoopStatus must be one of None, Track, Playlist, but was {0}")]
pub struct InvalidLoopStatus(String);
impl ::std::str::FromStr for LoopStatus {
type Err = InvalidLoopStatus;
fn from_str(string: &str) -> Result<Self, Self::Err> {
match string {
"None" => Ok(LoopStatus::None),
"Track" => Ok(LoopStatus::Track),
"Playlist" => Ok(LoopStatus::Playlist),
other => Err(InvalidLoopStatus(other.to_string())),
}
}
}
impl LoopStatus {
fn dbus_value(self) -> String {
String::from(match self {
LoopStatus::None => "None",
LoopStatus::Track => "Track",
LoopStatus::Playlist => "Playlist",
})
}
}
#[derive(Debug, Error)]
pub enum DBusError {
#[error("D-Bus call failed: {0}")]
TransportError(#[from] dbus::Error),
#[error("Failed to parse enum value: {0}")]
EnumParseError(String),
#[error("D-Bus call failed: {0}")]
TypeMismatchError(#[from] dbus::arg::TypeMismatchError),
#[error("Unexpected error: {0}")]
Miscellaneous(String),
}
impl From<InvalidPlaybackStatus> for DBusError {
fn from(error: InvalidPlaybackStatus) -> Self {
DBusError::EnumParseError(error.to_string())
}
}
impl From<InvalidLoopStatus> for DBusError {
fn from(error: InvalidLoopStatus) -> Self {
DBusError::EnumParseError(error.to_string())
}
}