commands: split response tokenizer into separate file
This commit is contained in:
307
src/commands.rs
307
src/commands.rs
@@ -1,6 +1,4 @@
|
||||
use std::collections::{HashMap, HashSet};
|
||||
|
||||
use crate::{Request, request_tokenizer::RequestTokenizer};
|
||||
use crate::{Request, request_tokenizer::RequestTokenizer, response_tokenizer::ResponseAttributes};
|
||||
|
||||
mod audio_output_devices;
|
||||
mod client_to_client;
|
||||
@@ -69,11 +67,9 @@ pub trait Command {
|
||||
Self::parse_request(tokenized).map(|(req, _)| (req, rest))
|
||||
}
|
||||
|
||||
fn parse_response(
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>>;
|
||||
fn parse_response(parts: ResponseAttributes<'_>) -> ResponseParserResult<'_, Self::Response>;
|
||||
|
||||
fn parse_raw_response(raw: &str) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
fn parse_raw_response(raw: &str) -> ResponseParserResult<'_, Self::Response> {
|
||||
Self::parse_response(ResponseAttributes::new(raw)?)
|
||||
}
|
||||
}
|
||||
@@ -90,6 +86,8 @@ pub enum RequestParserError {
|
||||
MissingNewline,
|
||||
}
|
||||
|
||||
pub type ResponseParserResult<'a, T> = Result<T, ResponseParserError<'a>>;
|
||||
|
||||
// TODO: should these be renamed to fit the mpd docs?
|
||||
// "Attribute" instead of "Property"?
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
@@ -115,265 +113,6 @@ pub enum ResponseParserError<'a> {
|
||||
// MissingNewline,
|
||||
}
|
||||
|
||||
pub type GenericResponseResult<'a> = Result<GenericResponse<'a>, &'a str>;
|
||||
|
||||
pub type GenericResponse<'a> = HashMap<&'a str, GenericResponseValue<'a>>;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub enum GenericResponseValue<'a> {
|
||||
Text(&'a str),
|
||||
Binary(&'a [u8]),
|
||||
// Many(Vec<GenericResponseValue<'a>>),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct ResponseAttributes<'a>(Vec<(&'a str, GenericResponseValue<'a>)>);
|
||||
|
||||
impl<'a> ResponseAttributes<'a> {
|
||||
pub fn new(raw: &'a str) -> Result<Self, ResponseParserError<'a>> {
|
||||
let mut parts = Vec::new();
|
||||
let mut lines = raw.lines();
|
||||
loop {
|
||||
let line = lines.next().ok_or(ResponseParserError::UnexpectedEOF)?;
|
||||
if line.is_empty() {
|
||||
println!("Warning: empty line in response");
|
||||
continue;
|
||||
}
|
||||
|
||||
if line == "OK" {
|
||||
break;
|
||||
}
|
||||
|
||||
let mut keyval = line.splitn(2, ": ");
|
||||
let key = keyval
|
||||
.next()
|
||||
.ok_or(ResponseParserError::SyntaxError(0, line))?;
|
||||
|
||||
// TODO: handle binary data, also verify binarylimit
|
||||
let value = keyval
|
||||
.next()
|
||||
.ok_or(ResponseParserError::SyntaxError(0, line))?;
|
||||
|
||||
parts.push((key, GenericResponseValue::Text(value)));
|
||||
}
|
||||
|
||||
Ok(parts.into())
|
||||
}
|
||||
|
||||
// pub fn get<'a>(&self, key: &str) -> Option<&GenericResponseValue<'a>> {
|
||||
// self.0.iter().find_map(|(k, v)| if k == &key { Some(v) } else { None })
|
||||
// }
|
||||
}
|
||||
|
||||
impl ResponseAttributes<'_> {
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.0.is_empty()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<HashMap<&'a str, GenericResponseValue<'a>>> for ResponseAttributes<'a> {
|
||||
fn from(map: HashMap<&'a str, GenericResponseValue<'a>>) -> Self {
|
||||
Self(map.into_iter().collect())
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<ResponseAttributes<'a>> for HashMap<&'a str, GenericResponseValue<'a>> {
|
||||
fn from(val: ResponseAttributes<'a>) -> Self {
|
||||
debug_assert!({
|
||||
let mut uniq = HashSet::new();
|
||||
val.0.iter().all(move |x| uniq.insert(*x))
|
||||
});
|
||||
|
||||
val.0.into_iter().collect()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<ResponseAttributes<'a>> for Vec<(&'a str, GenericResponseValue<'a>)> {
|
||||
fn from(val: ResponseAttributes<'a>) -> Self {
|
||||
val.0
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> From<Vec<(&'a str, GenericResponseValue<'a>)>> for ResponseAttributes<'a> {
|
||||
fn from(val: Vec<(&'a str, GenericResponseValue<'a>)>) -> Self {
|
||||
Self(val)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: There should probably be a helper that lets you extract and verify one, two or maybe
|
||||
// three properties without having to allocate a hashmap to get a nice API. We can retrieve
|
||||
// the properties by name with a loop on the inner vec.
|
||||
|
||||
/*******************/
|
||||
/* Parsing Helpers */
|
||||
/*******************/
|
||||
|
||||
macro_rules! _expect_property_type {
|
||||
($property:expr, $name:expr, $variant:ident) => {
|
||||
match $property {
|
||||
Some(crate::commands::GenericResponseValue::$variant(value)) => Some(value),
|
||||
Some(value) => {
|
||||
let actual_type = match value {
|
||||
crate::commands::GenericResponseValue::Text(_) => "Text",
|
||||
crate::commands::GenericResponseValue::Binary(_) => "Binary",
|
||||
};
|
||||
return Err(
|
||||
crate::commands::ResponseParserError::UnexpectedPropertyType(
|
||||
$name,
|
||||
actual_type,
|
||||
),
|
||||
);
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! _parse_optional_property_type {
|
||||
($name:expr, $property:expr) => {
|
||||
$property
|
||||
.map(|value| {
|
||||
value.parse().map_err(|_| {
|
||||
crate::commands::ResponseParserError::InvalidProperty($name, value)
|
||||
})
|
||||
})
|
||||
.transpose()?
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! _unwrap_optional_property_type {
|
||||
($name:expr, $property:expr) => {
|
||||
match $property {
|
||||
Some(value) => value,
|
||||
None => return Err(crate::commands::ResponseParserError::MissingProperty($name)),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! expect_optional_property_type {
|
||||
($property:expr, $name:expr, $variant:ident) => {
|
||||
crate::commands::_expect_property_type!($property, $name, $variant)
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! expect_property_type {
|
||||
($property:expr, $name:expr, $variant:ident) => {{
|
||||
let prop = crate::commands::_expect_property_type!($property, $name, $variant);
|
||||
crate::commands::_unwrap_optional_property_type!($name, prop)
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! get_optional_property {
|
||||
($parts:expr, $name:literal, $variant:ident) => {
|
||||
crate::commands::_expect_property_type!({ $parts.get($name).map(|v| *v) }, $name, $variant)
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! get_property {
|
||||
($parts:expr, $name:literal, $variant:ident) => {{
|
||||
let prop = crate::commands::_expect_property_type!(
|
||||
{ $parts.get($name).map(|v| *v) },
|
||||
$name,
|
||||
$variant
|
||||
);
|
||||
crate::commands::_unwrap_optional_property_type!($name, prop)
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! get_and_parse_optional_property {
|
||||
($parts:ident, $name:literal, $variant:ident) => {{
|
||||
let prop = crate::commands::_expect_property_type!(
|
||||
{ $parts.get($name).map(|v| *v) },
|
||||
$name,
|
||||
$variant
|
||||
);
|
||||
crate::commands::_parse_optional_property_type!($name, prop)
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! get_and_parse_property {
|
||||
($parts:ident, $name:literal, $variant:ident) => {{
|
||||
let prop = crate::commands::_expect_property_type!(
|
||||
{ $parts.get($name).map(|v| *v) },
|
||||
$name,
|
||||
$variant
|
||||
);
|
||||
let prop = crate::commands::_parse_optional_property_type!($name, prop);
|
||||
crate::commands::_unwrap_optional_property_type!($name, prop)
|
||||
}};
|
||||
}
|
||||
|
||||
macro_rules! get_next_optional_property {
|
||||
($parts:ident, $variant:ident) => {
|
||||
match $parts.next() {
|
||||
Some((name, value)) => {
|
||||
crate::commands::_expect_property_type!({ Some(value) }, name, $variant)
|
||||
.map(|value| (name, value))
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! get_next_property {
|
||||
($parts:ident, $variant:ident) => {
|
||||
match $parts.next() {
|
||||
Some((name, value)) => (
|
||||
name,
|
||||
crate::commands::_expect_property_type!({ Some(value) }, name, $variant).unwrap(),
|
||||
),
|
||||
None => return Err(crate::commands::ResponseParserError::UnexpectedEOF),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! get_next_and_parse_optional_property {
|
||||
($parts:ident, $variant:ident) => {
|
||||
match $parts.next() {
|
||||
Some((name, value)) => {
|
||||
let prop = crate::commands::_expect_property_type!({ Some(value) }, name, $variant);
|
||||
prop.map(|value| {
|
||||
(
|
||||
name,
|
||||
crate::commands::_parse_optional_property_type!(name, value),
|
||||
)
|
||||
})
|
||||
}
|
||||
None => None,
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! get_next_and_parse_property {
|
||||
($parts:ident, $variant:ident) => {
|
||||
match $parts.next() {
|
||||
Some((name, value)) => {
|
||||
let prop = crate::commands::_expect_property_type!({ Some(value) }, name, $variant);
|
||||
let prop = crate::commands::_parse_optional_property_type!(name, prop);
|
||||
(
|
||||
name,
|
||||
crate::commands::_unwrap_optional_property_type!(name, prop),
|
||||
)
|
||||
}
|
||||
None => return Err(crate::commands::ResponseParserError::UnexpectedEOF),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) use _expect_property_type;
|
||||
pub(crate) use _parse_optional_property_type;
|
||||
pub(crate) use _unwrap_optional_property_type;
|
||||
pub(crate) use expect_property_type;
|
||||
// pub(crate) use expect_optional_property_type;
|
||||
pub(crate) use get_and_parse_optional_property;
|
||||
pub(crate) use get_and_parse_property;
|
||||
// pub(crate) use get_next_and_parse_optional_property;
|
||||
pub(crate) use get_next_and_parse_property;
|
||||
// pub(crate) use get_next_optional_property;
|
||||
pub(crate) use get_next_property;
|
||||
pub(crate) use get_optional_property;
|
||||
pub(crate) use get_property;
|
||||
|
||||
/*******************/
|
||||
|
||||
pub const COMMAND_NAMES: &[&str] = &[
|
||||
@@ -522,39 +261,3 @@ pub const COMMAND_NAMES: &[&str] = &[
|
||||
Save::COMMAND,
|
||||
SearchPlaylist::COMMAND,
|
||||
];
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
#[cfg(debug_assertions)]
|
||||
fn test_valid_hashmap_uniqueness_assert() {
|
||||
let valid_maplike_attrs: ResponseAttributes = vec![
|
||||
("a", GenericResponseValue::Text("1")),
|
||||
("A", GenericResponseValue::Text("2")),
|
||||
("A ", GenericResponseValue::Text("3")),
|
||||
("b", GenericResponseValue::Text("4")),
|
||||
]
|
||||
.into();
|
||||
|
||||
let map: HashMap<_, _> = valid_maplike_attrs.into();
|
||||
assert_eq!(map.len(), 4);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(debug_assertions)]
|
||||
#[should_panic]
|
||||
fn test_invalid_hashmap_uniqueness_assert() {
|
||||
let invalid_maplike_attrs: ResponseAttributes = vec![
|
||||
("a", GenericResponseValue::Text("1")),
|
||||
("b", GenericResponseValue::Text("2")),
|
||||
("c", GenericResponseValue::Text("3")),
|
||||
("a", GenericResponseValue::Text("4")),
|
||||
]
|
||||
.into();
|
||||
|
||||
let map: HashMap<_, _> = invalid_maplike_attrs.into();
|
||||
assert_eq!(map.len(), 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::AudioOutputId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct DisableOutput;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::AudioOutputId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct EnableOutput;
|
||||
|
||||
@@ -3,11 +3,9 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct Outputs;
|
||||
@@ -38,7 +36,7 @@ impl Command for Outputs {
|
||||
}
|
||||
|
||||
fn parse_response(
|
||||
_parts: ResponseAttributes<'_>,
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
let mut outputs = Vec::new();
|
||||
|
||||
@@ -48,7 +46,7 @@ impl Command for Outputs {
|
||||
let mut enabled: Option<bool> = None;
|
||||
let mut attributes: HashMap<String, String> = HashMap::new();
|
||||
|
||||
for (k, v) in _parts.0.into_iter() {
|
||||
for (k, v) in Vec::from(parts).into_iter() {
|
||||
match k {
|
||||
"outputid" => {
|
||||
// Reset and store the previous output if all fields are present
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::AudioOutputId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct OutputSet;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::AudioOutputId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ToggleOutput;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
expect_property_type,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::ChannelName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct Channels;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
expect_property_type,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::ChannelName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct ReadMessages;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::ChannelName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct SendMessage;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::ChannelName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Subscribe;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::ChannelName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Unsubscribe;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct BinaryLimit;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Close;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Kill;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Password;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Ping;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserResult, ResponseAttributes, ResponseParserError, expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct Protocol;
|
||||
@@ -27,12 +26,12 @@ impl Command for Protocol {
|
||||
fn parse_response(
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
if let Some((k, _)) = parts.0.iter().find(|(k, _)| *k != "feature") {
|
||||
let parts_: Vec<_> = parts.into();
|
||||
if let Some((k, _)) = parts_.iter().find(|(k, _)| *k != "feature") {
|
||||
return Err(ResponseParserError::UnexpectedProperty(k));
|
||||
}
|
||||
|
||||
let list = parts
|
||||
.0
|
||||
let list = parts_
|
||||
.into_iter()
|
||||
.map(|(k, v)| Ok(expect_property_type!(Some(v), k, Text).to_string()))
|
||||
.collect::<Result<Vec<_>, ResponseParserError>>()?;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ProtocolAll;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserResult, ResponseAttributes, ResponseParserError, expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct ProtocolAvailable;
|
||||
@@ -27,12 +26,12 @@ impl Command for ProtocolAvailable {
|
||||
fn parse_response(
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
if let Some((k, _)) = parts.0.iter().find(|(k, _)| *k != "feature") {
|
||||
let parts_: Vec<_> = parts.into();
|
||||
if let Some((k, _)) = parts_.iter().find(|(k, _)| *k != "feature") {
|
||||
return Err(ResponseParserError::UnexpectedProperty(k));
|
||||
}
|
||||
|
||||
let list = parts
|
||||
.0
|
||||
let list = parts_
|
||||
.into_iter()
|
||||
.map(|(k, v)| Ok(expect_property_type!(Some(v), k, Text).to_string()))
|
||||
.collect::<Result<Vec<_>, ResponseParserError>>()?;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ProtocolClear;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Feature,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ProtocolDisable;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Feature,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ProtocolEnable;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct TagTypes;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct TagTypesAll;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserResult, ResponseAttributes, ResponseParserError, expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct TagTypesAvailable;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct TagTypesClear;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::TagName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct TagTypesDisable;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::TagName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct TagTypesEnable;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::TagName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct TagTypesReset;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Next;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Pause;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::SongPosition,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Play;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::SongId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlayId;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Previous;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongPosition, TimeWithFractions},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Seek;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
common::{SeekMode, TimeWithFractions},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct SeekCur;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongId, TimeWithFractions},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct SeekId;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Stop;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserResult, ResponseAttributes, ResponseParserError, expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct ListMounts;
|
||||
|
||||
@@ -2,10 +2,9 @@ use std::collections::HashMap;
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserResult, ResponseAttributes, ResponseParserError, expect_property_type,
|
||||
},
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct ListNeighbors;
|
||||
|
||||
@@ -2,10 +2,9 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Mount;
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Unmount;
|
||||
|
||||
@@ -3,12 +3,10 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_property, get_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Offset, Uri},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property, get_property},
|
||||
};
|
||||
|
||||
pub struct AlbumArt;
|
||||
|
||||
@@ -3,13 +3,11 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::GroupType,
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct Count;
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Find;
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongPosition, Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct FindAdd;
|
||||
|
||||
@@ -3,12 +3,10 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct GetFingerprint;
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, expect_property_type,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{GroupType, TagName},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct List;
|
||||
@@ -67,13 +65,13 @@ impl Command for List {
|
||||
fn parse_response(
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
let parts_: Vec<_> = parts.into();
|
||||
debug_assert!({
|
||||
let key = parts.0.first().map(|(k, _)| k);
|
||||
parts.0.iter().all(|(k, _)| k == key.unwrap())
|
||||
let key = parts_.first().map(|(k, _)| k);
|
||||
parts_.iter().all(|(k, _)| k == key.unwrap())
|
||||
});
|
||||
|
||||
let list = parts
|
||||
.0
|
||||
let list = parts_
|
||||
.into_iter()
|
||||
.map(|(k, v)| Ok(expect_property_type!(Some(v), k, Text).to_string()))
|
||||
.collect::<Result<Vec<_>, ResponseParserError>>()?;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ListAll;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ListAllInfo;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ListFiles;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, expect_property_type,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct LsInfo;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, GenericResponseValue, Request, RequestParserError, RequestParserResult,
|
||||
ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{GenericResponseValue, ResponseAttributes},
|
||||
};
|
||||
|
||||
pub struct ReadComments;
|
||||
|
||||
@@ -3,12 +3,12 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_property, get_optional_property, get_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Offset, Uri},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{
|
||||
ResponseAttributes, get_and_parse_property, get_optional_property, get_property,
|
||||
},
|
||||
};
|
||||
|
||||
pub struct ReadPicture;
|
||||
|
||||
@@ -3,12 +3,10 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct Rescan;
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Search;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
common::{SongPosition, Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct SearchAdd;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
common::{PlaylistName, SongPosition, Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct SearchAddPl;
|
||||
|
||||
@@ -3,13 +3,11 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::GroupType,
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct SearchCount;
|
||||
|
||||
@@ -3,12 +3,10 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::Uri,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct Update;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::PartitionName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct DelPartition;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
expect_property_type,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::PartitionName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, expect_property_type},
|
||||
};
|
||||
|
||||
pub struct ListPartitions;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct MoveOutput;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::PartitionName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct NewPartition;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::PartitionName,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Partition;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::BoolOrOneshot,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Consume;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Seconds,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Crossfade;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
get_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::VolumeValue,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct GetVol;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct MixRampDb;
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::Seconds,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct MixRampDelay;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Random;
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Repeat;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::ReplayGainModeMode,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ReplayGainMode;
|
||||
|
||||
@@ -3,12 +3,10 @@ use std::{collections::HashMap, str::FromStr};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
get_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::ReplayGainModeMode,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_property},
|
||||
};
|
||||
|
||||
pub struct ReplayGainStatus;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::VolumeValue,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct SetVol;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::BoolOrOneshot,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Single;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::VolumeValue,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Volume;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
/// Clears the current error message in status (this is also accomplished by any command that starts playback)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
/// Displays the song info of the current song (same song that is identified in status)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::request_tokenizer::RequestTokenizer;
|
||||
use crate::common::SubSystem;
|
||||
|
||||
use crate::commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::SubSystem,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Idle;
|
||||
|
||||
@@ -3,10 +3,10 @@ use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
get_and_parse_optional_property, get_and_parse_property,
|
||||
response_tokenizer::{
|
||||
ResponseAttributes, get_and_parse_optional_property, get_and_parse_property,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -3,13 +3,14 @@ use std::str::FromStr;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::request_tokenizer::RequestTokenizer;
|
||||
use crate::common::{Audio, BoolOrOneshot, SongId, SongPosition};
|
||||
|
||||
use crate::commands::{
|
||||
Command, GenericResponseValue, Request, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_and_parse_optional_property, get_and_parse_property,
|
||||
get_optional_property, get_property,
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
common::{Audio, BoolOrOneshot, SongId, SongPosition},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{
|
||||
GenericResponseValue, ResponseAttributes, get_and_parse_optional_property,
|
||||
get_and_parse_property, get_optional_property, get_property,
|
||||
},
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongPosition, Uri},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Add;
|
||||
|
||||
@@ -1,12 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, Request, RequestParserError, RequestParserResult, ResponseAttributes,
|
||||
ResponseParserError, get_next_and_parse_property,
|
||||
},
|
||||
commands::{Command, Request, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongId, SongPosition, Uri},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::{ResponseAttributes, get_next_and_parse_property},
|
||||
};
|
||||
|
||||
pub struct AddId;
|
||||
|
||||
@@ -2,11 +2,11 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
common::{SongId, TagName, TagValue},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct AddTagId;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::{
|
||||
commands::{Command, Request, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Clear;
|
||||
|
||||
@@ -2,11 +2,10 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{SongId, TagName},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct ClearTagId;
|
||||
|
||||
@@ -2,11 +2,10 @@ use std::str::FromStr;
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::OneOrRange,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Delete;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::SongId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct DeleteId;
|
||||
|
||||
@@ -2,11 +2,11 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
common::{AbsouluteRelativeSongPosition, OneOrRange},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct Move;
|
||||
|
||||
@@ -2,11 +2,11 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
common::{AbsouluteRelativeSongPosition, SongId},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
};
|
||||
|
||||
pub struct MoveId;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
use crate::{
|
||||
Request,
|
||||
commands::{Command, RequestParserResult, ResponseParserError},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError},
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Playlist;
|
||||
|
||||
@@ -2,12 +2,11 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlaylistFind;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::SongId,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlaylistId;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::OneOrRange,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlaylistInfo;
|
||||
|
||||
@@ -2,12 +2,11 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Sort, WindowRange},
|
||||
filter::Filter,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlaylistSearch;
|
||||
|
||||
@@ -2,11 +2,10 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Version, WindowRange},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlChanges;
|
||||
|
||||
@@ -2,11 +2,10 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Version, WindowRange},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PlChangesPosId;
|
||||
|
||||
@@ -2,11 +2,10 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Priority, WindowRange},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct Prio;
|
||||
|
||||
@@ -2,11 +2,10 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
Request,
|
||||
request_tokenizer::RequestTokenizer,
|
||||
commands::{
|
||||
Command, RequestParserError, RequestParserResult, ResponseAttributes, ResponseParserError,
|
||||
},
|
||||
commands::{Command, RequestParserError, RequestParserResult, ResponseParserError},
|
||||
common::{Priority, SongId},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
};
|
||||
|
||||
pub struct PrioId;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user