Skip to main content

minecraft_pinger/
lib.rs

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// Require at least one feature to be enabled
11#[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
20#[derive(Debug, Clone)]
21pub struct MinecraftPinger {
22    dns_resolver: Arc<Resolver<TokioRuntimeProvider>>,
23}
24
25impl MinecraftPinger {
26    pub fn new() -> Result<Self, PingError> {
27        let resolver = Resolver::builder_with_config(
28            ResolverConfig::udp_and_tcp(&CLOUDFLARE),
29            TokioRuntimeProvider::default(),
30        )
31        .build()
32        .map_err(|e| PingError::Init(e.to_string()))?;
33
34        Ok(Self {
35            dns_resolver: Arc::new(resolver),
36        })
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use super::*;
43
44    #[test]
45    fn test_minecraft_pinger_new() {
46        let pinger = MinecraftPinger::new();
47        assert!(pinger.is_ok());
48    }
49
50    #[test]
51    fn test_minecraft_pinger_new_multiple() {
52        let pinger1 = MinecraftPinger::new();
53        let pinger2 = MinecraftPinger::new();
54        assert!(pinger1.is_ok());
55        assert!(pinger2.is_ok());
56    }
57}