commands: split Command trait into req + res parts
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use crate::{
|
||||
commands::{Command, RequestParserError, ResponseParserError},
|
||||
commands::{Command, CommandRequest, CommandResponse, RequestParserError, ResponseParserError},
|
||||
common::types::{PlaylistVersion, WindowRange},
|
||||
request_tokenizer::RequestTokenizer,
|
||||
response_tokenizer::ResponseAttributes,
|
||||
@@ -15,19 +15,30 @@ pub struct PlChangesRequest {
|
||||
pub window: Option<WindowRange>,
|
||||
}
|
||||
|
||||
impl Command for PlChanges {
|
||||
type Request = PlChangesRequest;
|
||||
type Response = ();
|
||||
impl CommandRequest<'_> for PlChangesRequest {
|
||||
const COMMAND: &'static str = "plchanges";
|
||||
|
||||
fn serialize_request(&self, request: Self::Request) -> String {
|
||||
match request.window {
|
||||
Some(window) => format!("{} {} {}", Self::COMMAND, request.version, window),
|
||||
None => format!("{} {}", Self::COMMAND, request.version),
|
||||
fn into_request_enum(self) -> crate::Request {
|
||||
crate::Request::PlChanges(self.version, self.window)
|
||||
}
|
||||
|
||||
fn from_request_enum(request: crate::Request) -> Option<Self> {
|
||||
match request {
|
||||
crate::Request::PlChanges(version, window) => {
|
||||
Some(PlChangesRequest { version, window })
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_request(mut parts: RequestTokenizer<'_>) -> Result<Self::Request, RequestParserError> {
|
||||
fn serialize(&self) -> String {
|
||||
match self.window.as_ref() {
|
||||
Some(window) => format!("{} {} {}", Self::COMMAND, self.version, window),
|
||||
None => format!("{} {}", Self::COMMAND, self.version),
|
||||
}
|
||||
}
|
||||
|
||||
fn parse(mut parts: RequestTokenizer<'_>) -> Result<Self, RequestParserError> {
|
||||
let version = parts.next().ok_or(RequestParserError::UnexpectedEOF)?;
|
||||
let version = version
|
||||
.parse()
|
||||
@@ -45,10 +56,26 @@ impl Command for PlChanges {
|
||||
|
||||
Ok(PlChangesRequest { version, window })
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_response(
|
||||
parts: ResponseAttributes<'_>,
|
||||
) -> Result<Self::Response, ResponseParserError<'_>> {
|
||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||
pub struct PlChangesResponse;
|
||||
|
||||
impl CommandResponse<'_> for PlChangesResponse {
|
||||
fn from_response_enum(response: crate::Response) -> Option<Self> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn into_response_enum(self) -> crate::Response {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn parse(parts: ResponseAttributes<'_>) -> Result<Self, ResponseParserError<'_>> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Command<'_, '_> for PlChanges {
|
||||
type Request = PlChangesRequest;
|
||||
type Response = PlChangesResponse;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user