1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* Copyright 2025-2026 Colliery Software
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//! # Workflow Registry
//!
//! This module provides a registry system for dynamically loading and managing
//! packaged workflows (.so files) created by cloacina-ctl. The registry enables
//! runtime distribution of workflows with proper isolation and versioning.
//!
//! ## Architecture
//!
//! The registry uses a two-table design:
//! - `workflow_registry`: Simple key-value storage for binary .so data
//! - `workflow_packages`: Rich metadata with foreign key to registry
//!
//! This separation allows efficient metadata queries without loading binaries
//! and enables future migration to object storage for the binary data.
//!
//! ## Key Components
//!
//! - [`traits`]: Core trait definitions for registry and storage
//! - [`types`]: Data types for workflows, metadata, and errors
//! - [`error`]: Error types for registry operations
//! - [`storage`]: Storage backend implementations (PostgreSQL, filesystem)
//!
//! ## Usage Example
//!
//! ```rust,ignore
//! use cloacina::registry::{WorkflowRegistry, WorkflowPackage};
//! use cloacina::dal::{PostgresWorkflowRegistryDAL, FilesystemWorkflowRegistryDAL};
//!
//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
//! // Create storage backend (PostgreSQL or filesystem)
//! let storage = PostgresWorkflowRegistryDAL::new(database);
//! // or: let storage = FilesystemWorkflowRegistryDAL::new("/var/lib/cloacina/registry")?;
//!
//! // Create registry with chosen storage
//! let mut registry = WorkflowRegistryImpl::new(database, storage)?;
//!
//! // Register a packaged workflow
//! let package = WorkflowPackage::from_file("analytics.cloacina")?;
//! let package_id = registry.register_workflow(package).await?;
//!
//! // List registered workflows
//! let workflows = registry.list_workflows().await?;
//!
//! // Load and execute
//! let loaded = registry.get_workflow("analytics", "1.0.0").await?;
//! # Ok(())
//! # }
//! ```
// Re-export commonly used types
pub use ;
pub use ;
pub use ;
pub use ;
pub use ;
pub use FilesystemWorkflowRegistry;
pub use WorkflowRegistryImpl;