use crate::{distro::OSConfig, error::AppResult}; use self::{base_task::BaseTask, custom_task::CustomTask, exec_builder::ExecBuilder}; pub mod base_task; pub mod custom_task; pub mod exec_builder; pub mod task_executor; pub trait TaskTrait { fn up(&self, config: &OSConfig) -> AppResult>; fn down(&self, config: &OSConfig) -> AppResult>; } #[derive(Clone, Debug)] pub enum Task { Base(BaseTask), Custom(CustomTask), } impl TaskTrait for Task { #[inline] fn up(&self, config: &OSConfig) -> AppResult> { match self { Task::Base(b) => b.up(config), Task::Custom(c) => c.up(config), } } #[inline] fn down(&self, config: &OSConfig) -> AppResult> { match self { Task::Base(b) => b.down(config), Task::Custom(c) => c.down(config), } } }