use crate::capabilities::{render, CapabilityContext, View};
use crate::cli::{Cli, NetworkAction};
use crate::error::Result;
mod model;
mod reads;
pub(super) const NM_NAME: &str = "org.freedesktop.NetworkManager";
pub(super) const NM_MGR_PATH: &str = "/org/freedesktop/NetworkManager";
pub(super) const NM_MGR_IFACE: &str = "org.freedesktop.NetworkManager";
pub(super) const PROPS_IFACE: &str = "org.freedesktop.DBus.Properties";
pub(super) const DEVICE_IFACE: &str = "org.freedesktop.NetworkManager.Device";
pub(super) const IP4_IFACE: &str = "org.freedesktop.NetworkManager.IP4Config";
pub(super) const IP6_IFACE: &str = "org.freedesktop.NetworkManager.IP6Config";
pub(super) const ACTIVE_IFACE: &str = "org.freedesktop.NetworkManager.Connection.Active";
pub(super) const DHCP4_IFACE: &str = "org.freedesktop.NetworkManager.DHCP4Config";
pub fn dispatch(cli: &Cli, action: &NetworkAction) -> i32 {
let result = run(cli, action);
render(cli, result)
}
fn run(cli: &Cli, action: &NetworkAction) -> Result<View> {
let mut client = crate::capabilities::connect(cli)?;
let host = client.host().to_string();
let channel = client.dbus_open(NM_NAME)?;
let mut ctx = CapabilityContext {
client: &mut client,
channel: &channel,
host: &host,
};
match action {
NetworkAction::List { all } => reads::list(&mut ctx, *all),
NetworkAction::Show { device } => reads::show(&mut ctx, device),
}
}