From 8bb407cb5ded22b79476acd5b50207f87ff29dc9 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Fri, 21 Nov 2025 15:12:21 +0900 Subject: [PATCH] commands: implement response parser for `protocol available` --- .../connection_settings/protocol_available.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/commands/connection_settings/protocol_available.rs b/src/commands/connection_settings/protocol_available.rs index 8cd09ffc..3cc133f0 100644 --- a/src/commands/connection_settings/protocol_available.rs +++ b/src/commands/connection_settings/protocol_available.rs @@ -1,12 +1,13 @@ use crate::{ - Request, - commands::{Command, RequestParserResult, ResponseAttributes, ResponseParserError}, + commands::{expect_property_type, Command, RequestParserResult, ResponseAttributes, ResponseParserError}, Request }; pub struct ProtocolAvailable; +pub type ProtocolAvailableResponse = Vec; + impl Command for ProtocolAvailable { - type Response = (); + type Response = ProtocolAvailableResponse; const COMMAND: &'static str = "protocol available"; fn parse_request(mut parts: std::str::SplitWhitespace<'_>) -> RequestParserResult<'_> { @@ -17,6 +18,16 @@ impl Command for ProtocolAvailable { fn parse_response( parts: ResponseAttributes<'_>, ) -> Result> { - unimplemented!() + for (k, _) in parts.0.iter().filter(|(k, _)| *k != "feature") { + return Err(ResponseParserError::UnexpectedProperty(k)); + } + + let list = parts + .0 + .into_iter() + .map(|(k, v)| Ok(expect_property_type!(Some(v), k, Text).to_string())) + .collect::, ResponseParserError>>()?; + + Ok(list) } }