pub mod condition;
pub mod id_shift;
pub mod payload;
pub mod root_setting;
pub mod rule;
pub mod rule_set;
use crate::error::ApplyError;
use crate::view::{ApplyResult, EditCommand};
use super::Workspace;
impl Workspace {
pub fn apply(&mut self, cmd: EditCommand) -> Result<ApplyResult, ApplyError> {
let (changed_nodes, requires_reload) = match cmd {
EditCommand::AddRuleSet { path } => {
let ids = self.cmd_add_rule_set(path)?;
(ids, true)
}
EditCommand::RemoveRuleSet { id } => {
let ids = self.cmd_remove_rule_set(id)?;
(ids, true)
}
EditCommand::AddRule { parent, rule } => {
let ids = self.cmd_add_rule(parent, rule)?;
(ids, true)
}
EditCommand::UpdateRule { id, rule } => {
let ids = self.cmd_update_rule(id, rule)?;
(ids, true)
}
EditCommand::DeleteRule { id } => {
let ids = self.cmd_delete_rule(id)?;
(ids, true)
}
EditCommand::MoveRule { id, new_index } => {
let ids = self.cmd_move_rule(id, new_index)?;
(ids, true)
}
EditCommand::UpdateRespond { id, respond } => {
let ids = self.cmd_update_respond(id, respond)?;
(ids, true)
}
EditCommand::UpdateRootSetting { key, value } => {
let ids = self.cmd_update_root_setting(key, value)?;
(ids, true)
}
EditCommand::AddHeaderCondition { rule_id, condition } => {
let ids = self.cmd_add_header_condition(rule_id, condition)?;
(ids, true)
}
EditCommand::UpdateHeaderCondition { id, condition } => {
let ids = self.cmd_update_header_condition(id, condition)?;
(ids, true)
}
EditCommand::RemoveHeaderCondition { id } => {
let ids = self.cmd_remove_header_condition(id)?;
(ids, true)
}
EditCommand::AddBodyCondition { rule_id, condition } => {
let ids = self.cmd_add_body_condition(rule_id, condition)?;
(ids, true)
}
EditCommand::UpdateBodyCondition { id, condition } => {
let ids = self.cmd_update_body_condition(id, condition)?;
(ids, true)
}
EditCommand::RemoveBodyCondition { id } => {
let ids = self.cmd_remove_body_condition(id)?;
(ids, true)
}
EditCommand::UpdateRuleSetStrategy { id, strategy } => {
let ids = self.cmd_update_rule_set_strategy(id, strategy)?;
(ids, true) }
};
let diagnostics = self.collect_diagnostics();
Ok(ApplyResult {
changed_nodes,
diagnostics,
requires_reload,
})
}
}