moduforge_transform/
mark_step.rs

1use std::sync::Arc;
2
3use moduforge_model::{mark::Mark, schema::Schema, types::NodeId};
4use crate::draft::Draft;
5
6use super::{
7    ConcreteStep,
8    step::{Step, StepResult},
9    transform::TransformError,
10};
11use serde::{Deserialize, Serialize};
12#[derive(Debug, Serialize, Deserialize, Clone)]
13pub struct AddMarkStep {
14    id: NodeId,
15    marks: Vec<Mark>,
16}
17impl AddMarkStep {
18    pub fn new(
19        id: NodeId,
20        marks: Vec<Mark>,
21    ) -> Self {
22        AddMarkStep { id, marks }
23    }
24}
25impl Step for AddMarkStep {
26    fn apply(
27        &self,
28        dart: &mut Draft,
29        schema: Arc<Schema>,
30    ) -> Result<StepResult, TransformError> {
31        let _ = schema;
32
33        match dart.add_mark(&self.id, &self.marks) {
34            Ok(_) => Ok(dart.commit()),
35            Err(err) => Err(TransformError::new(err.to_string())),
36        }
37    }
38
39    fn to_concrete(&self) -> super::ConcreteStep {
40        ConcreteStep::AddMarkStep(self.clone())
41    }
42}