use crate::defaults::tasks::{Help, TaskReport, WrapperTask};
use crate::dependencies::project_dependency::ProjectDependencyPlugin;
use crate::plugins::{Plugin, PluginAware};
use crate::project::error::ProjectResult;
use crate::project::GetProjectId;
use crate::Project;
#[derive(Default)]
pub struct BasePlugin;
pub const TASKS_REPORT_TASK_NAME: &str = "tasks";
pub const HELP_TASK_NAME: &str = "help";
pub const WRAPPER_TASK_NAME: &str = "wrapper";
pub const ASSEMBLE_GROUP: &str = "assemble";
impl Plugin<Project> for BasePlugin {
fn apply_to(&self, project: &mut Project) -> ProjectResult {
trace!("applying the base plugin to {}", project);
project
.task_container_mut()
.register_task_with::<TaskReport, _>(TASKS_REPORT_TASK_NAME, |tasks, _| {
tasks.set_group(ASSEMBLE_GROUP);
Ok(())
})?;
let mut help = project
.task_container_mut()
.register_task::<Help>(HELP_TASK_NAME)?;
help.configure_with(|task, _| {
task.set_group(ASSEMBLE_GROUP);
Ok(())
})?;
project.set_default_tasks([help.id().clone()]);
if project.is_root() {
project
.task_container_mut()
.register_task_with::<WrapperTask, _>(WRAPPER_TASK_NAME, |task, _| {
task.set_group(ASSEMBLE_GROUP);
Ok(())
})?;
}
project.apply_plugin::<ProjectDependencyPlugin>()?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use crate::defaults::plugins::TASKS_REPORT_TASK_NAME;
use crate::defaults::tasks::TaskReport;
use crate::identifier::TaskId;
use crate::project::finder::TaskFinder;
use crate::Project;
#[test]
fn base_always_applied() {
let project = Project::temp(None);
let handle = project.find_task(TASKS_REPORT_TASK_NAME);
assert!(
handle.is_ok(),
"{} was not added to project",
TASKS_REPORT_TASK_NAME
);
let handle = handle.unwrap();
let task_report = handle.as_type::<TaskReport>();
assert!(
task_report.is_some(),
"could not get {} as TaskReport",
TASKS_REPORT_TASK_NAME
);
}
}