last_order 0.1.2

A Rust library for managing network devices.
Documentation
use anyhow::Result;

pub trait Configurable {
    type SessionType: Configurable;

    fn enter_config(&mut self) -> Result<ConfigurationMode<Self::SessionType>>;
    fn execute(&mut self, command: &str) -> Result<String>;
    fn exit(&mut self) -> Result<()>;
}

pub struct ConfigurationMode<'a, T: Configurable> {
    pub(crate) session: &'a mut T,
}

impl<'a, T: Configurable> ConfigurationMode<'a, T> {
    pub fn enter(session: &mut T) -> ConfigurationMode<T> {
        ConfigurationMode { session }
    }

    pub fn execute(&mut self, command: &str) -> Result<String> {
        self.session.execute(command)
    }
}

impl<T: Configurable> Drop for ConfigurationMode<'_, T> {
    fn drop(&mut self) {
        let _ = self.session.exit();
    }
}