41 lines
1.2 KiB
Rust
41 lines
1.2 KiB
Rust
use std::{collections::HashMap, str::FromStr};
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::{
|
|
commands::{
|
|
get_property, Command, Request, RequestParserResult, ResponseAttributes,
|
|
ResponseParserError,
|
|
}, common::ReplayGainModeMode,
|
|
};
|
|
|
|
pub struct ReplayGainStatus;
|
|
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct ReplayGainStatusResponse {
|
|
pub replay_gain_mode: ReplayGainModeMode,
|
|
}
|
|
|
|
impl Command for ReplayGainStatus {
|
|
type Response = ReplayGainStatusResponse;
|
|
const COMMAND: &'static str = "replay_gain_status";
|
|
|
|
fn parse_request(mut parts: std::str::SplitWhitespace<'_>) -> RequestParserResult<'_> {
|
|
debug_assert!(parts.next().is_none());
|
|
Ok((Request::ReplayGainStatus, ""))
|
|
}
|
|
|
|
fn parse_response(
|
|
parts: ResponseAttributes<'_>,
|
|
) -> Result<Self::Response, ResponseParserError> {
|
|
let parts: HashMap<_, _> = parts.into();
|
|
let replay_gain_mode = get_property!(parts, "replay_gain_mode", Text);
|
|
|
|
Ok(ReplayGainStatusResponse {
|
|
replay_gain_mode: ReplayGainModeMode::from_str(replay_gain_mode).map_err(|_| {
|
|
ResponseParserError::InvalidProperty("replay_gain_mode", replay_gain_mode)
|
|
})?,
|
|
})
|
|
}
|
|
}
|