Skip to main content

runkon_flow/
workflow_resolver_memory.rs

1use std::collections::HashMap;
2use std::sync::Arc;
3
4use crate::dsl::WorkflowDef;
5use crate::engine_error::EngineError;
6use crate::traits::workflow_resolver::WorkflowResolver;
7
8pub struct InMemoryWorkflowResolver {
9    defs: HashMap<String, WorkflowDef>,
10}
11
12impl InMemoryWorkflowResolver {
13    pub fn new(defs: impl IntoIterator<Item = (impl Into<String>, WorkflowDef)>) -> Self {
14        Self {
15            defs: defs.into_iter().map(|(k, v)| (k.into(), v)).collect(),
16        }
17    }
18}
19
20impl WorkflowResolver for InMemoryWorkflowResolver {
21    fn resolve(&self, name: &str) -> Result<Arc<WorkflowDef>, EngineError> {
22        self.defs
23            .get(name)
24            .map(|d| Arc::new(d.clone()))
25            .ok_or_else(|| EngineError::WorkflowNotFound(name.to_string()))
26    }
27}