use std::net::ToSocketAddrs;
use strum::EnumString;
pub mod generic;
use generic::device::NetworkDevice;
pub mod vendor;
pub mod error;
use error::Error;
#[derive(Debug, Clone, Copy, PartialEq, EnumString)]
#[strum(serialize_all = "snake_case")]
pub enum Vendor {
Aruba,
H3C,
Huawei,
}
pub fn create_network_device<A: ToSocketAddrs>(
vendor: Vendor,
addr: A,
username: Option<&str>,
password: Option<&str>,
) -> Result<Box<dyn NetworkDevice>, Error> {
Ok(match vendor {
Vendor::Aruba => vendor::aruba::ArubaSSH::connect(addr, username, password)?.into_dyn(),
Vendor::H3C => vendor::h3c::H3cSSH::connect(addr, username, password)?.into_dyn(),
Vendor::Huawei => vendor::huawei::HuaweiSSH::connect(addr, username, password)?.into_dyn(),
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn dev() -> anyhow::Result<()> {
env_logger::try_init().ok();
let ssh = (Vendor::Aruba, format!("{}:22", "10.123.0.15"));
let user = Some("HBSpy");
let pass = Some(std::env::var("LO_TESTPASS").expect("LO_TESTPASS not set"));
let mut ssh = create_network_device(ssh.0, ssh.1, user, pass.as_deref())?;
let result = ssh.execute("show alarms")?;
dbg!(&result);
Ok(())
}
}