From 184f9fc215bf4abbd2b70ee3b314379ecebf0fc0 Mon Sep 17 00:00:00 2001
From: h7x4 <h7x4@nani.wtf>
Date: Sat, 30 Nov 2024 02:28:29 +0100
Subject: [PATCH] commands/stats: parse_response

---
 src/commands/querying_mpd_status/stats.rs | 25 +++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/commands/querying_mpd_status/stats.rs b/src/commands/querying_mpd_status/stats.rs
index a101a7c..babfbb0 100644
--- a/src/commands/querying_mpd_status/stats.rs
+++ b/src/commands/querying_mpd_status/stats.rs
@@ -1,7 +1,10 @@
+use std::collections::HashMap;
+
 use serde::{Deserialize, Serialize};
 
 use crate::commands::{
-    Command, Request, RequestParserResult, ResponseAttributes, ResponseParserError,
+    get_and_parse_optional_property, get_and_parse_property, Command, Request, RequestParserResult,
+    ResponseAttributes, ResponseParserError,
 };
 
 pub struct Stats;
@@ -30,6 +33,24 @@ impl Command for Stats {
     fn parse_response(
         parts: ResponseAttributes<'_>,
     ) -> Result<Self::Response, ResponseParserError> {
-        todo!()
+        let parts: HashMap<_, _> = parts.into();
+
+        let uptime = get_and_parse_property!(parts, "uptime", Text);
+        let playtime = get_and_parse_property!(parts, "playtime", Text);
+        let artists = get_and_parse_optional_property!(parts, "artists", Text);
+        let albums = get_and_parse_optional_property!(parts, "albums", Text);
+        let songs = get_and_parse_optional_property!(parts, "songs", Text);
+        let db_playtime = get_and_parse_optional_property!(parts, "db_playtime", Text);
+        let db_update = get_and_parse_optional_property!(parts, "db_update", Text);
+
+        Ok(StatsResponse {
+            uptime,
+            playtime,
+            artists,
+            albums,
+            songs,
+            db_playtime,
+            db_update,
+        })
     }
 }