nmrs 3.1.0

A Rust library for NetworkManager over D-Bus
Documentation
use nmrs::NetworkManager;

#[tokio::main]
async fn main() -> nmrs::Result<()> {
    let nm = NetworkManager::new().await?;
    let vpns = nm.list_vpn_connections().await?;

    println!(
        "{:<20} {:<38} {:<16} {:<12} active",
        "id", "uuid", "type", "user"
    );
    println!("{}", "-".repeat(90));

    for vpn in &vpns {
        let type_label = match &vpn.vpn_type {
            nmrs::VpnType::WireGuard { .. } => "wireguard".to_string(),
            nmrs::VpnType::OpenVpn {
                connection_type, ..
            } => {
                format!(
                    "openvpn/{}",
                    connection_type
                        .map(|ct| format!("{ct:?}"))
                        .unwrap_or_default()
                )
            }
            nmrs::VpnType::OpenConnect { .. } => "openconnect".to_string(),
            nmrs::VpnType::StrongSwan { .. } => "strongswan".to_string(),
            nmrs::VpnType::Pptp { .. } => "pptp".to_string(),
            nmrs::VpnType::L2tp { .. } => "l2tp".to_string(),
            nmrs::VpnType::Generic { service_type, .. } => service_type.clone(),
            _ => "(unknown)".to_string(),
        };

        let user = vpn.user_name.as_deref().unwrap_or("(n/a)");
        let active_icon = if vpn.active { "" } else { "" };

        println!(
            "{:<20} {:<38} {:<16} {:<12} {}",
            vpn.id, vpn.uuid, type_label, user, active_icon
        );
    }

    Ok(())
}