247 lines
8.3 KiB
Rust
247 lines
8.3 KiB
Rust
use crate::{common::SubSystem, Request, Response};
|
||
|
||
pub trait MPDServer {
|
||
type Error;
|
||
|
||
fn route_request(&mut self, request: Request) -> Result<Response, Self::Error> {
|
||
match request {
|
||
Request::ClearError => self.handle_clear_error().map(|_| Response::Ok),
|
||
Request::CurrentSong => self.handle_current_song().map(|_| Response::Ok),
|
||
Request::Idle(subsystems) => self.handle_idle(subsystems).map(|_| Response::Ok),
|
||
Request::Status => self.handle_status().map(|_| Response::Ok),
|
||
Request::Stats => self.handle_stats().map(|_| Response::Ok),
|
||
_ => unimplemented!(),
|
||
}
|
||
}
|
||
|
||
fn handle_unimplemented(&mut self) -> Result<(), Self::Error> {
|
||
// fn handle_unimplemented(&mut self, name: &str) -> Result<(), Self::Error> {
|
||
// return Err("a".into());
|
||
unimplemented!()
|
||
}
|
||
|
||
// -- Query Commands -- //
|
||
fn handle_clear_error(&mut self) -> Result<(), Self::Error> {
|
||
self.handle_unimplemented()
|
||
}
|
||
fn handle_current_song(&mut self) -> Result<(), Self::Error> {
|
||
self.handle_unimplemented()
|
||
}
|
||
fn handle_idle(&mut self, _: Option<Vec<SubSystem>>) -> Result<(), Self::Error> {
|
||
self.handle_unimplemented()
|
||
}
|
||
fn handle_status(&mut self) -> Result<(), Self::Error> {
|
||
self.handle_unimplemented()
|
||
}
|
||
fn handle_stats(&mut self) -> Result<(), Self::Error> {
|
||
self.handle_unimplemented()
|
||
}
|
||
|
||
// -- Playback Commands -- //
|
||
// handle_consume(ConsumeState),
|
||
// handle_crossfade(Seconds),
|
||
// handle_mix_ramp_db(f32),
|
||
// handle_mix_ramp_delay(Seconds),
|
||
// handle_random(bool),
|
||
// handle_repeat(bool),
|
||
// handle_set_vol(Volume),
|
||
// handle_get_vol,
|
||
// handle_single(SingleState),
|
||
// handle_replay_gain_mode(ReplayGainMode),
|
||
// handle_replay_gain_status,
|
||
// handle_volume(Volume),
|
||
|
||
// // -- Playback Control Commands -- //
|
||
// next,
|
||
// pause(Option<bool>),
|
||
// play(SongPosition),
|
||
// play_id(SongId),
|
||
// previous,
|
||
// seek(SongPosition, TimeWithFractions),
|
||
// seek_id(SongId, TimeWithFractions),
|
||
// seek_cur(SeekMode, TimeWithFractions),
|
||
// stop,
|
||
|
||
// // -- Queue Commands -- //
|
||
// handle_add(String, Option<SongPosition>),
|
||
// handle_add_id(String, Option<SongPosition>),
|
||
// handle_clear,
|
||
// handle_delete(OneOrRange),
|
||
// handle_delete_id(SongId),
|
||
// handle_move(OneOrRange, SongPosition),
|
||
// handle_move_id(SongId, SongPosition),
|
||
// handle_playlist,
|
||
// handle_playlist_find(Filter, Option<Sort>, Option<WindowRange>),
|
||
// handle_playlist_id(SongId),
|
||
// handle_playlist_info(OneOrRange),
|
||
// handle_playlist_search(Filter, Option<Sort>, Option<WindowRange>),
|
||
// handle_pl_changes(Version, Option<WindowRange>),
|
||
// handle_pl_changes_pos_id(Version, Option<WindowRange>),
|
||
// handle_prio(Priority, WindowRange),
|
||
// handle_prio_id(Priority, Vec<SongId>),
|
||
// handle_range_id(SongId, WindowRange),
|
||
// handle_shuffle(Option<OneOrRange>),
|
||
// handle_swap(SongPosition, SongPosition),
|
||
// handle_swap_id(SongId, SongId),
|
||
// handle_add_tag_id(SongId, TagName, TagValue),
|
||
// handle_clear_tag_id(SongId, TagName),
|
||
|
||
// // -- Stored Playlist Commands -- //
|
||
// ListPlaylist(PlaylistName, Option<WindowRange>),
|
||
// ListPlaylistInfo(PlaylistName, Option<WindowRange>),
|
||
// SearchPlaylist(PlaylistName, Filter, Option<WindowRange>),
|
||
// ListPlaylists,
|
||
// Load(PlaylistName, Option<WindowRange>, SongPosition),
|
||
// PlaylistAdd(PlaylistName, Uri, SongPosition),
|
||
// PlaylistClear(PlaylistName),
|
||
// PlaylistDelete(PlaylistName, OneOrRange),
|
||
// PlaylistLength(PlaylistName),
|
||
// // TODO: which type of range?
|
||
// PlaylistMove(PlaylistName, OneOrRange, SongPosition),
|
||
// Rename(PlaylistName, PlaylistName),
|
||
// Rm(PlaylistName),
|
||
// Save(PlaylistName, Option<SaveMode>),
|
||
|
||
// // -- Music Database Commands -- //
|
||
// AlbumArt(Uri, Offset),
|
||
// Count(Filter, Option<GroupType>),
|
||
// GetFingerprint(Uri),
|
||
// Find(Filter, Option<Sort>, Option<WindowRange>),
|
||
// FindAdd(Filter, Option<Sort>, Option<WindowRange>, Option<SongPosition>),
|
||
// List(Tag, Filter, Option<GroupType>),
|
||
// #[deprecated]
|
||
// ListAll(Option<Uri>),
|
||
// #[deprecated]
|
||
// ListAllInfo(Option<Uri>),
|
||
// ListFiles(Uri),
|
||
// LsInfo(Option<Uri>),
|
||
// ReadComments(Uri),
|
||
// ReadPicture(Uri, Offset),
|
||
// Search(Filter, Option<Sort>, Option<WindowRange>),
|
||
// SearchAdd(Filter, Option<Sort>, Option<WindowRange>, Option<SongPosition>),
|
||
// SearchAddPl(Filter, Option<Sort>, Option<WindowRange>, Option<SongPosition>),
|
||
// SearchCount(Filter, Option<GroupType>),
|
||
// Update(Option<Uri>),
|
||
// Rescan(Option<Uri>),
|
||
|
||
// // -- Mount and Neighbor Commands -- //
|
||
// Mount(Option<Path>, Option<Uri>),
|
||
// Unmount(Path),
|
||
// ListMounts,
|
||
// ListNeighbors,
|
||
|
||
// // -- Sticker Commands -- //
|
||
// StickerGet(StickerType, Uri, String),
|
||
// StickerSet(StickerType, Uri, String, String),
|
||
// StickerDelete(StickerType, Uri, String),
|
||
// StickerList(StickerType, Uri),
|
||
// StickerFind(StickerType, Uri, String, Option<Sort>, Option<WindowRange>),
|
||
// StickerFindValue(StickerType, Uri, String, String, Option<Sort>, Option<WindowRange>),
|
||
// StickerNames,
|
||
// StickerTypes,
|
||
// StickerNamesTypes(Option<StickerType>),
|
||
|
||
// // -- Connection Commands -- //
|
||
// Close,
|
||
// Kill,
|
||
// Password(String),
|
||
// Ping,
|
||
// BinaryLimit(u64),
|
||
// TagTypes,
|
||
// TagTypesDisable(Vec<Tag>),
|
||
// TagTypesEnable(Vec<Tag>),
|
||
// TagTypesClear,
|
||
// TagTypesAll,
|
||
// TagTypesAvailable,
|
||
// TagTypesReset(Vec<Tag>),
|
||
// Protocol,
|
||
// ProtocolDisable(Vec<Feature>),
|
||
// ProtocolEnable(Vec<Feature>),
|
||
// ProtocolClear,
|
||
// ProtocolAll,
|
||
// ProtocolAvailable,
|
||
|
||
// // -- Partition Commands -- //
|
||
// Partition(PartitionName),
|
||
// ListPartitions,
|
||
// NewPartition(PartitionName),
|
||
// DelPartition(PartitionName),
|
||
// MoveOutput(String),
|
||
|
||
// // -- Audio Output Commands -- //
|
||
// DisableOutput(AudioOutputId),
|
||
// EnableOutput(AudioOutputId),
|
||
// ToggleOutput(AudioOutputId),
|
||
// Outputs,
|
||
// OutputSet(AudioOutputId, String, String),
|
||
|
||
// // -- Reflection Commands -- //
|
||
// Config,
|
||
// Commands,
|
||
// NotCommands,
|
||
// UrlHandlers,
|
||
// Decoders,
|
||
|
||
// // -- Client to Client Commands -- //
|
||
// Subscribe(ChannelName),
|
||
// Unsubscribe(ChannelName),
|
||
// Channels,
|
||
// ReadMessages,
|
||
// SendMessage(ChannelName, String),
|
||
}
|
||
|
||
// impl Into<Vec<u8>> for Request {
|
||
// fn into(self) -> Vec<u8> {
|
||
// todo!()
|
||
// }
|
||
// }
|
||
|
||
// #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||
// pub enum SaveMode {
|
||
// Create,
|
||
// Append,
|
||
// Replace,
|
||
// }
|
||
|
||
// #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||
// pub enum SeekMode {
|
||
// Relative,
|
||
// RelativeReverse,
|
||
// Absolute,
|
||
// }
|
||
|
||
// #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||
// pub enum SubSystem {
|
||
// /// The song database has been modified after update.
|
||
// Database,
|
||
// /// A database update has started or finished. If the database was modified during the update, the database event is also emitted.
|
||
// Update,
|
||
// /// A stored playlist has been modified, renamed, created or deleted
|
||
// StoredPlaylist,
|
||
// /// The queue (i.e. the current playlist) has been modified
|
||
// Playlist,
|
||
// /// The player has been started, stopped or seeked or tags of the currently playing song have changed (e.g. received from stream)
|
||
// Player,
|
||
// /// The volume has been changed
|
||
// Mixer,
|
||
// /// An audio output has been added, removed or modified (e.g. renamed, enabled or disabled)
|
||
// Output,
|
||
// /// Options like repeat, random, crossfade, replay gain
|
||
// Options,
|
||
// /// A partition was added, removed or changed
|
||
// Partition,
|
||
// /// The sticker database has been modified.
|
||
// Sticker,
|
||
// /// A client has subscribed or unsubscribed to a channel
|
||
// Subscription,
|
||
// /// A message was received on a channel this client is subscribed to; this event is only emitted when the client’s message queue is empty
|
||
// Message,
|
||
// /// A neighbor was found or lost
|
||
// Neighbor,
|
||
// /// The mount list has changed
|
||
// Mount,
|
||
|
||
// /// Other subsystems not covered by the above
|
||
// Other(String),
|
||
// }
|