use pyo3::IntoPyObject;
use crate::node_info::NodeInfo;
#[derive(Debug, IntoPyObject)]
pub struct StatusNode {
pub stable_id: String,
pub display_name: String,
pub ipv4: String,
pub ipv6: String,
pub online: Option<bool>,
pub allowed_routes: Vec<String>,
pub is_exit_node: bool,
}
impl From<&tailscale::StatusNode> for StatusNode {
fn from(value: &tailscale::StatusNode) -> Self {
Self {
stable_id: value.stable_id.0.clone(),
display_name: value.display_name.clone(),
ipv4: value.ipv4.to_string(),
ipv6: value.ipv6.to_string(),
online: value.online,
allowed_routes: value.allowed_routes.iter().map(|r| r.to_string()).collect(),
is_exit_node: value.is_exit_node,
}
}
}
#[derive(Debug, IntoPyObject)]
pub struct Status {
pub self_node: Option<StatusNode>,
pub peers: Vec<StatusNode>,
}
impl From<&tailscale::Status> for Status {
fn from(value: &tailscale::Status) -> Self {
Self {
self_node: value.self_node.as_ref().map(StatusNode::from),
peers: value.peers.iter().map(StatusNode::from).collect(),
}
}
}
#[derive(Debug, IntoPyObject)]
pub struct WhoIs {
pub node: NodeInfo,
pub user: Option<String>,
pub capabilities: Vec<(String, Vec<String>)>,
}
impl From<&tailscale::WhoIs> for WhoIs {
fn from(value: &tailscale::WhoIs) -> Self {
Self {
node: NodeInfo::from(&value.node),
user: value.user.clone(),
capabilities: value.capabilities.clone(),
}
}
}