48 lines
1.4 KiB
Rust
48 lines
1.4 KiB
Rust
use std::collections::HashMap;
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{
|
|
commands::{Command, CommandResponse, ResponseParserError, single_item_command_request},
|
|
response_tokenizer::{GenericResponseValue, ResponseAttributes},
|
|
types::Uri,
|
|
};
|
|
|
|
pub struct ReadComments;
|
|
|
|
single_item_command_request!(ReadComments, "readcomments", Uri);
|
|
|
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
|
pub struct ReadCommentsResponse(HashMap<String, String>);
|
|
|
|
impl CommandResponse for ReadCommentsResponse {
|
|
fn into_response_enum(self) -> crate::Response {
|
|
todo!()
|
|
}
|
|
|
|
fn from_response_enum(response: crate::Response) -> Option<Self> {
|
|
todo!()
|
|
}
|
|
|
|
fn parse(parts: ResponseAttributes<'_>) -> Result<Self, ResponseParserError> {
|
|
let parts: HashMap<_, _> = parts.into_map()?;
|
|
|
|
let comments = parts
|
|
.iter()
|
|
.map(|(k, v)| match v {
|
|
GenericResponseValue::Text(s) => Ok((k.to_string(), s.to_string())),
|
|
GenericResponseValue::Binary(_) => {
|
|
Err(ResponseParserError::SyntaxError(1, k.to_string()))
|
|
}
|
|
})
|
|
.collect::<Result<HashMap<_, _>, ResponseParserError>>()?;
|
|
|
|
Ok(ReadCommentsResponse(comments))
|
|
}
|
|
}
|
|
|
|
impl Command for ReadComments {
|
|
type Request = ReadCommentsRequest;
|
|
type Response = ReadCommentsResponse;
|
|
}
|