runkon_flow/
workflow_resolver_memory.rs1use 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}