Skip to main content

wfe_core/models/
mod.rs

1//! Core data models for workflows, execution pointers, events, and results.
2//!
3//! These types are the building blocks of the WFE runtime. Most are serialized
4//! to JSON when persisted or sent over the wire.
5
6/// OCI-compatible artifact references and blobs.
7pub mod artifact;
8/// Step condition evaluation (used by `if_do` and `while_do`).
9pub mod condition;
10/// Error handling behavior for failed steps.
11pub mod error_behavior;
12/// External events and subscriptions.
13pub mod event;
14/// Errors that occur during step execution.
15pub mod execution_error;
16/// The runtime pointer tracking a step's execution state.
17pub mod execution_pointer;
18/// The result returned by a step, controlling flow and persistence.
19pub mod execution_result;
20/// Lifecycle event types (started, completed, failed, etc.).
21pub mod lifecycle;
22/// HTTP polling configuration for `PollEndpointStep`.
23pub mod poll_config;
24/// Work queue classification (workflow vs event queue).
25pub mod queue_type;
26/// Commands scheduled for future execution.
27pub mod scheduled_command;
28/// JSON Schema support for workflow definitions.
29pub mod schema;
30/// Service definitions and readiness probes.
31pub mod service;
32/// Workflow and pointer status enums.
33pub mod status;
34/// The static workflow definition (steps, outcomes, metadata).
35pub mod workflow_definition;
36/// The mutable runtime instance of a workflow.
37pub mod workflow_instance;
38
39pub use condition::{ComparisonOp, FieldComparison, StepCondition};
40pub use error_behavior::ErrorBehavior;
41pub use event::{Event, EventSubscription};
42pub use execution_error::ExecutionError;
43pub use execution_pointer::ExecutionPointer;
44pub use execution_result::ExecutionResult;
45pub use lifecycle::{LifecycleEvent, LifecycleEventType};
46pub use poll_config::{HttpMethod, PollCondition, PollEndpointConfig};
47pub use queue_type::QueueType;
48pub use scheduled_command::{CommandName, ScheduledCommand};
49pub use schema::{SchemaType, WorkflowSchema};
50pub use service::{
51    ReadinessCheck, ReadinessProbe, ServiceDefinition, ServiceEndpoint, ServicePort,
52};
53pub use status::{PointerStatus, WorkflowStatus};
54pub use workflow_definition::{SharedVolume, StepOutcome, WorkflowDefinition, WorkflowStep};
55pub use workflow_instance::WorkflowInstance;
56pub use artifact::{
57    ArtifactBlob, ArtifactRef, ARTIFACT_REF_KEY, MEDIA_TYPE_OCI_LAYER_GZIP,
58    MEDIA_TYPE_OCI_LAYER_TAR, artifact_ref_value, is_artifact_ref, parse_artifact_ref,
59};
60
61/// Serde helper for `Option<Duration>` as milliseconds.
62pub(crate) mod option_duration_millis {
63    use std::time::Duration;
64
65    use serde::{Deserialize, Deserializer, Serializer};
66
67/// Serialize.
68    pub fn serialize<S: Serializer>(
69        duration: &Option<Duration>,
70        serializer: S,
71    ) -> Result<S::Ok, S::Error> {
72        match duration {
73            Some(d) => serializer.serialize_some(&(d.as_millis() as u64)),
74            None => serializer.serialize_none(),
75        }
76    }
77
78/// Deserialize.
79    pub fn deserialize<'de, D: Deserializer<'de>>(
80        deserializer: D,
81    ) -> Result<Option<Duration>, D::Error> {
82        let millis: Option<u64> = Option::deserialize(deserializer)?;
83        Ok(millis.map(Duration::from_millis))
84    }
85}
86
87/// Serde helper for `Duration` as milliseconds (non-optional).
88pub(crate) mod duration_millis {
89    use std::time::Duration;
90
91    use serde::{Deserialize, Deserializer, Serializer};
92
93/// Serialize.
94    pub fn serialize<S: Serializer>(duration: &Duration, serializer: S) -> Result<S::Ok, S::Error> {
95        serializer.serialize_u64(duration.as_millis() as u64)
96    }
97
98/// Deserialize.
99    pub fn deserialize<'de, D: Deserializer<'de>>(deserializer: D) -> Result<Duration, D::Error> {
100        let millis = u64::deserialize(deserializer)?;
101        Ok(Duration::from_millis(millis))
102    }
103}