snowstorm/geoip/
mod.rs

1use serde::{Deserialize, Serialize};
2use thiserror::Error;
3
4use crate::config::serializable::GeoIp;
5
6#[derive(Serialize, Deserialize, Debug, Clone)]
7pub struct TunnelInfo {
8    pub origin_ip: Option<GeoIp>,
9    pub exit_ip: Option<GeoIp>,
10}
11
12impl TunnelInfo {
13    pub fn update_origin_ip(&mut self, new_ip: Option<GeoIp>) {
14        log::info!("New origin IP: {:?}", new_ip);
15        self.origin_ip = new_ip.or(self.origin_ip.clone());
16    }
17
18    pub fn update_exit_ip(&mut self, ip: Option<GeoIp>) {
19        self.exit_ip = ip;
20    }
21}
22
23impl Default for TunnelInfo {
24    fn default() -> Self {
25        TunnelInfo {
26            origin_ip: None,
27            exit_ip: None,
28        }
29    }
30}
31
32#[derive(Error, Debug)]
33pub enum GeoIpError {
34    #[error("Failed to get public IP")]
35    IpLookupFailed,
36}