pkgs-cli 0.2.0

A simple cli tool to manage packages.
Documentation
use std::path::Path;

use super::{LogMessage, LoggerOutput};

pub struct Logger<O: LoggerOutput> {
    output: O,
    messages: Vec<LogMessage>,
}

impl<O: LoggerOutput> Logger<O> {
    pub fn new(output: O) -> Self {
        Self {
            output,
            messages: vec![],
        }
    }

    pub fn messages(&self) -> &[LogMessage] {
        &self.messages
    }

    pub fn log(&mut self, message: LogMessage) {
        self.output.log(&message);
        self.messages.push(message);
    }

    pub fn load_module(&mut self, module: impl AsRef<str>) {
        self.log(LogMessage::LoadModule(module.as_ref().into()));
    }

    pub fn unload_module(&mut self, module: impl AsRef<str>) {
        self.log(LogMessage::UnloadModule(module.as_ref().into()));
    }

    pub fn rollback_load_module(&mut self, module: impl AsRef<str>) {
        self.log(LogMessage::RollbackLoadModule(module.as_ref().into()));
    }

    pub fn rollback_unload_module(&mut self, module: impl AsRef<str>) {
        self.log(LogMessage::RollbackUnloadModule(module.as_ref().into()));
    }

    pub fn create_dir(&mut self, path: impl AsRef<Path>) {
        self.log(LogMessage::CreateDir(path.as_ref().into()));
    }

    pub fn create_symlink(&mut self, src: impl AsRef<Path>, dst: impl AsRef<Path>) {
        self.log(LogMessage::CreateSymlink {
            src: src.as_ref().into(),
            dst: dst.as_ref().into(),
        });
    }

    pub fn remove_dir(&mut self, path: impl AsRef<Path>) {
        self.log(LogMessage::RemoveDir(path.as_ref().into()));
    }

    pub fn remove_symlink(&mut self, src: impl AsRef<Path>, dst: impl AsRef<Path>) {
        self.log(LogMessage::RemoveSymlink {
            src: src.as_ref().into(),
            dst: dst.as_ref().into(),
        });
    }
}