Skip to main content

bpmn_engine/capability/
traits.rs

1//! Capability Traits
2//!
3//! Capability trait definitions for BPMN elements that define what they can do.
4//!
5//! Capabilities represent the abilities or features that BPMN elements provide.
6//! This allows for a flexible, extensible design where elements can be composed
7//! based on their capabilities.
8
9use crate::engine::ExecutionContext;
10use async_trait::async_trait;
11use std::collections::HashMap;
12
13/// Capability Trait
14///
15/// Represents a capability that a BPMN element can provide.
16/// Capabilities define what an element can do, allowing for flexible composition.
17#[async_trait]
18pub trait Capability: Send + Sync {
19    /// Get the capability name
20    fn name(&self) -> &str;
21
22    /// Check if this capability is available in the given context
23    fn is_available(&self, context: &ExecutionContext) -> bool;
24
25    /// Execute the capability
26    ///
27    /// # Arguments
28    /// * `context` - Execution context
29    /// * `parameters` - Capability-specific parameters
30    ///
31    /// # Returns
32    /// * `Ok(CapabilityResult)` - Capability execution result
33    /// * `Err(CapabilityError)` - Capability execution error
34    async fn execute(
35        &self,
36        context: &mut ExecutionContext,
37        parameters: &HashMap<String, serde_json::Value>,
38    ) -> Result<CapabilityResult, CapabilityError>;
39}
40
41/// Capability Result
42///
43/// Result of executing a capability.
44#[derive(Debug, Clone)]
45pub struct CapabilityResult {
46    /// Output data
47    pub output: HashMap<String, serde_json::Value>,
48    /// Whether the capability execution was successful
49    pub success: bool,
50}
51
52/// Capability Error
53///
54/// Error that occurred during capability execution.
55#[derive(Debug, thiserror::Error)]
56pub enum CapabilityError {
57    #[error("Capability execution failed: {0}")]
58    ExecutionFailed(String),
59    #[error("Capability not available: {0}")]
60    NotAvailable(String),
61    #[error("Invalid parameters: {0}")]
62    InvalidParameters(String),
63}
64
65/// Capability Provider
66///
67/// Trait for elements that provide capabilities.
68pub trait CapabilityProvider: Send + Sync {
69    /// Get all capabilities provided by this element
70    fn get_capabilities(&self) -> Vec<Box<dyn Capability>>;
71}
72