5 use std
::net
::{SocketAddr
, ToSocketAddrs
};
6 use serde
::{Serialize
, Serializer
};
8 use crate::HLQueryError
::A2SError
;
12 A2SError(a2s
::errors
::Error
)
15 impl Display
for HLQueryError
{
16 fn fmt(&self, f
: &mut fmt
::Formatter
) -> fmt
::Result
{
18 A2SError(e
) => write
!(f
, "{}", e
)
23 impl Error
for HLQueryError
{}
25 impl Serialize
for HLQueryError
{
26 fn serialize
<S
>(&self, serializer
: S
) -> Result
<S
::Ok
, S
::Error
>
30 serializer
.serialize_str(&format
!("{self}"))
34 impl From
<a2s
::errors
::Error
> for HLQueryError
{
35 fn from(e
: a2s
::errors
::Error
) -> Self {
42 let client
= A2SClient
::new().unwrap
();
43 let addresses
= args().skip(1)
44 .flat
_map
(|arg
| arg
.to_socket_addrs())
45 .flat
_map
(|iter_addr
| iter_addr
.flat
_map
(|sa
| match sa
{
46 SocketAddr
::V4(sa4
) => Some(sa4
),
51 for address
in addresses
{
53 println
!("Querying address: {}", address
);
55 let result
: Result
<a2s
::info
::Info
, HLQueryError
> = client
.in
fo
(address
).map_err(From
::from
);
56 println
!("{}\n", serde_json
::to_string_pretty(&result
).unwrap
());
58 let result
: Result
<Vec
<a2s
::rules
::Rule
>, HLQueryError
> = client
.rules(address
).map_err(From
::from
);
59 println
!("{}\n", serde_json
::to_string_pretty(&result
).unwrap
());
61 let result
: Result
<Vec
<a2s
::players
::Player
>, HLQueryError
> = client
.players(address
).map_err(From
::from
);
62 println
!("{}\n", serde_json
::to_string_pretty(&result
).unwrap
());