brctl 1.0.0

A wrapper for brctl(ethernet bridge administration)
Documentation
use brctl::{BridgeController, CommandError};

fn main() -> Result<(), CommandError> {
	env_logger::init();

	match BridgeController::check() {
		Ok((brctl_version, interfaces)) => {
			println!("brctl version: {}", brctl_version);
			println!("Interfaces: {:?}", interfaces);

			println!("The system is ready for bridge operations!")
		}
		Err(e) => eprintln!("The system is not ready for bridge operations: {}", e),
	}

	println!();

	if let Some(mybridge) = BridgeController::get_bridge("mybridge")? {
		mybridge.delete()?;
	}

	let mybridge = BridgeController::create_bridge("mybridge")?;

	mybridge.add_interface("enp9s0")?;

	let bridges = BridgeController::list_bridges()?;
	println!("Available bridges:");
	for b in bridges {
		println!("  - {}", b);
	}

	println!();

	println!("{}:", mybridge.get_name());
	println!("  Interfaces:");
	for i in mybridge.get_interfaces()? {
		println!("    - {}", i);
	}

	println!("  ID: {}", mybridge.get_id()?);
	println!("  STP: {}", mybridge.get_stp()?);

	println!();

	let mybridge = BridgeController::get_bridge("mybridge")?;
	assert!(mybridge.is_some(), "Bridge not found");
	mybridge.expect("Bridge not found").delete()?;

	let mybridge = BridgeController::get_bridge("mybridge")?;
	assert!(mybridge.is_none(), "Bridge not deleted");

	println!("Bridge deleted successfully");
	Ok(())
}