use serde::{Deserialize, Serialize}; use crate::{ commands::{Command, RequestParserError, ResponseParserError}, common::types::{PlaylistVersion, WindowRange}, request_tokenizer::RequestTokenizer, response_tokenizer::ResponseAttributes, }; pub struct PlChangesPosId; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct PlChangesPosIdRequest { pub version: PlaylistVersion, pub window: Option, } impl Command for PlChangesPosId { type Request = PlChangesPosIdRequest; type Response = (); const COMMAND: &'static str = "plchangesposid"; 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 parse_request(mut parts: RequestTokenizer<'_>) -> Result { let version = parts.next().ok_or(RequestParserError::UnexpectedEOF)?; let version = version .parse() .map_err(|_| RequestParserError::SyntaxError(0, version.to_string()))?; let window = parts .next() .map(|w| { w.parse() .map_err(|_| RequestParserError::SyntaxError(0, w.to_string())) }) .transpose()?; debug_assert!(parts.next().is_none()); Ok(PlChangesPosIdRequest { version, window }) } fn parse_response( parts: ResponseAttributes<'_>, ) -> Result> { unimplemented!() } }