782152192ce80918cf84409ec5628814e6c60a0d
5 use std
::net
::{SocketAddr
, SocketAddrV4
, ToSocketAddrs
};
6 use serde
::{Serialize
, Serializer
};
8 use crate::HLQueryError
::A2SError
;
10 #[derive(Debug, Serialize)]
11 struct HLQueryResult
{
12 info
: Result
<a2s
::info
::Info
, HLQueryError
>,
13 rules
: Result
<Vec
<a2s
::rules
::Rule
>, HLQueryError
>,
14 players
: Result
<Vec
<a2s
::players
::Player
>, HLQueryError
>
18 fn new(a2s_client
: &A2SClient
, server
: SocketAddrV4
) -> Self {
20 info
: a2s_client
.in
fo
(server
).map_err(From
::from
),
21 rules
: a2s_client
.rules(server
).map_err(From
::from
),
22 players
: a2s_client
.players(server
).map_err(From
::from
)
29 A2SError(a2s
::errors
::Error
)
32 impl Display
for HLQueryError
{
33 fn fmt(&self, f
: &mut fmt
::Formatter
) -> fmt
::Result
{
35 A2SError(e
) => write
!(f
, "{}", e
)
40 impl Error
for HLQueryError
{}
42 impl Serialize
for HLQueryError
{
43 fn serialize
<S
>(&self, serializer
: S
) -> Result
<S
::Ok
, S
::Error
>
47 serializer
.serialize_str(&format
!("{self}"))
51 impl From
<a2s
::errors
::Error
> for HLQueryError
{
52 fn from(e
: a2s
::errors
::Error
) -> Self {
59 let client
= A2SClient
::new().unwrap
();
60 let addresses
= args().skip(1)
61 .flat
_map
(|arg
| arg
.to_socket_addrs())
62 .flat
_map
(|iter_addr
| iter_addr
.flat
_map
(|sa
| match sa
{
63 SocketAddr
::V4(sa4
) => Some(sa4
),
68 for address
in addresses
{
70 println
!("Querying address: {}", address
);
72 let result
= HLQueryResult
::new(&client
, address
);
73 println
!("{}\n", serde_json
::to_string_pretty(&result
).unwrap
());