1pub mod common;
2pub mod config;
3pub mod error;
4
5#[cfg(feature = "bedrock")]
6pub mod bedrock;
7#[cfg(feature = "java")]
8pub mod java;
9
10#[cfg(not(any(feature = "java", feature = "bedrock")))]
12compile_error!("At least one of the 'java' or 'bedrock' features must be enabled");
13
14use error::PingError;
15use hickory_resolver::Resolver;
16use hickory_resolver::config::{CLOUDFLARE, ResolverConfig};
17use hickory_resolver::net::runtime::TokioRuntimeProvider;
18use std::sync::Arc;
19
20pub struct MinecraftPinger {
21 dns_resolver: Arc<Resolver<TokioRuntimeProvider>>,
22}
23
24impl MinecraftPinger {
25 pub fn new() -> Result<Self, PingError> {
26 let resolver = Resolver::builder_with_config(
27 ResolverConfig::udp_and_tcp(&CLOUDFLARE),
28 TokioRuntimeProvider::default(),
29 )
30 .build()
31 .map_err(|e| PingError::Init(e.to_string()))?;
32
33 Ok(Self {
34 dns_resolver: Arc::new(resolver),
35 })
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn test_minecraft_pinger_new() {
45 let pinger = MinecraftPinger::new();
46 assert!(pinger.is_ok());
47 }
48
49 #[test]
50 fn test_minecraft_pinger_new_multiple() {
51 let pinger1 = MinecraftPinger::new();
52 let pinger2 = MinecraftPinger::new();
53 assert!(pinger1.is_ok());
54 assert!(pinger2.is_ok());
55 }
56}