Consolidate results to one struct
authorMegaBrutal <megabrutal+github@megabrutal.com>
Sat, 18 Feb 2023 03:25:00 +0000 (04:25 +0100)
committerMegaBrutal <megabrutal+github@megabrutal.com>
Sat, 18 Feb 2023 03:25:00 +0000 (04:25 +0100)
src/main.rs

index 468c5e2231996c9d8c019e982e8ff540962468e5..782152192ce80918cf84409ec5628814e6c60a0d 100644 (file)
@@ -2,11 +2,28 @@ use std::fmt;
 use std::fmt::Display;
 use std::error::Error;
 use std::env::args;
-use std::net::{SocketAddr, ToSocketAddrs};
+use std::net::{SocketAddr, SocketAddrV4, ToSocketAddrs};
 use serde::{Serialize, Serializer};
 use a2s::A2SClient;
 use crate::HLQueryError::A2SError;
 
+#[derive(Debug, Serialize)]
+struct HLQueryResult {
+    info:       Result<a2s::info::Info, HLQueryError>,
+    rules:      Result<Vec<a2s::rules::Rule>, HLQueryError>,
+    players:    Result<Vec<a2s::players::Player>, HLQueryError>
+}
+
+impl HLQueryResult {
+    fn new(a2s_client: &A2SClient, server: SocketAddrV4) -> Self {
+        Self {
+            info:       a2s_client.info(server).map_err(From::from),
+            rules:      a2s_client.rules(server).map_err(From::from),
+            players:    a2s_client.players(server).map_err(From::from)
+        }
+    }
+}
+
 #[derive(Debug)]
 enum HLQueryError {
     A2SError(a2s::errors::Error)
@@ -52,13 +69,7 @@ fn main() {
 
         println!("Querying address: {}", address);
 
-        let result: Result<a2s::info::Info, HLQueryError> = client.info(address).map_err(From::from);
-        println!("{}\n", serde_json::to_string_pretty(&result).unwrap());
-
-        let result: Result<Vec<a2s::rules::Rule>, HLQueryError> = client.rules(address).map_err(From::from);
-        println!("{}\n", serde_json::to_string_pretty(&result).unwrap());
-
-        let result: Result<Vec<a2s::players::Player>, HLQueryError> = client.players(address).map_err(From::from);
+        let result = HLQueryResult::new(&client, address);
         println!("{}\n", serde_json::to_string_pretty(&result).unwrap());
 
     }