iop_coeus_node/operations/
delete.rs1use super::*;
2
3impl AuthorizedCommand for DoDelete {
4 fn validate_auth(&self, state: &State, pk: &MPublicKey) -> Result<()> {
5 state.validate_domain_owner(&self.name, pk)
6 }
7}
8
9impl Command for DoDelete {
10 fn execute(self, state: &mut State) -> Result<UndoOperation> {
11 let parent_name = self.name.parent().with_context(|| "Cannot delete root domain")?;
12 let parent_domain = state.domain_mut(&parent_name)?;
13 let child_edge = self.name.last_edge().unwrap();
14 let domain = parent_domain.remove_child(child_edge)?;
16 let undo_operation = UndoDelete { domain };
17 Ok(UndoOperation::Delete(Box::new(undo_operation)))
18 }
19}
20
21#[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq)]
22#[serde(rename_all = "camelCase")]
23pub struct UndoDelete {
24 domain: Domain,
25}
26
27impl UndoCommand for UndoDelete {
28 fn execute(self, state: &mut State) -> Result<()> {
29 let parent_name =
30 self.domain.name().parent().with_context(|| "Cannot undo deleting root domain")?;
31 let parent_domain = state.domain_mut(&parent_name)?;
32 parent_domain.insert_or_replace_child(self.domain)?;
33 Ok(())
34 }
35}