contego/src/util.rs

52 lines
1.2 KiB
Rust
Raw Normal View History

2023-05-25 01:20:56 +02:00
use std::{error::Error, fs, net::SocketAddr, path::PathBuf};
2023-05-22 03:54:49 +02:00
2023-05-25 01:20:56 +02:00
const PUBLIC_IPV4: &str = "https://ipinfo.io/ip";
const PUBLIC_IPV6: &str = "https://ipv6.icanhazip.com";
#[derive(PartialEq, Eq)]
pub enum Ip {
V4,
V6,
Local,
}
impl Ip {
pub fn fetch(self, port: u16) -> Result<SocketAddr, Box<dyn Error + Send + Sync>> {
let addr = match self {
Ip::V4 => PUBLIC_IPV4,
Ip::V6 => PUBLIC_IPV6,
Local => {
let addr_str = format!("127.0.0.1:{}", port);
return addr_str.parse::<SocketAddr>();
}
};
let res = format!("{}:{}", ureq::get(addr).call()?.into_string()?.trim(), port);
let addr = res.parse::<SocketAddr>()?;
Ok(addr)
}
}
fn filepaths(
2023-05-22 03:54:49 +02:00
infile: Option<PathBuf>,
files: Option<Vec<PathBuf>>,
) -> Result<Vec<PathBuf>, Box<dyn Error>> {
let mut filepaths = Vec::new();
if let Some(infile) = infile {
let paths = fs::read_to_string(infile)?;
for path in paths.lines() {
filepaths.push(PathBuf::from(path));
}
}
if let Some(files) = files {
for file in files {
filepaths.push(file);
}
}
Ok(filepaths)
}