moduforge_transform/
mark_step.rs1use 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}