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}