rust_simple_ping/
lib.rs

1use std::{error::Error, net::IpAddr};
2
3#[cfg(test)]
4mod tests;
5
6const DEFAULT_ADDRESS: IpAddr = IpAddr::V4(std::net::Ipv4Addr::new(8, 8, 8, 8));
7const DEFAULT_PAYLOAD: &[u8] = &[0; 8];
8
9pub async fn ping(
10    address: Option<IpAddr>,
11    payload: Option<&[u8]>,
12) -> Result<(surge_ping::IcmpPacket, std::time::Duration), Box<dyn Error>> {
13    let address = address.unwrap_or(DEFAULT_ADDRESS);
14    let payload = payload.unwrap_or(DEFAULT_PAYLOAD);
15
16    let pinged = surge_ping::ping(address, payload).await;
17
18    match pinged {
19        Ok(pinged) => {
20            // println!("Ping: {:?}", pinged);
21            Ok(pinged)
22        }
23        Err(e) => {
24            // println!("Error: {:?}", e);
25            Err(Box::new(e))
26        }
27    }
28}