Skip to main content

worldinterface_core/flowspec/
connector.rs

1//! Connector node types for FlowSpec.
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// A boundary-crossing node that invokes an external connector.
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8pub struct ConnectorNode {
9    /// Registry name of the connector (e.g., "http.request", "fs.write").
10    pub connector: String,
11    /// Connector-specific parameters. Opaque JSON validated by the connector at
12    /// invocation time. May contain template references like
13    /// `"{{nodes.step_a.output.field}}"` resolved at runtime.
14    pub params: Value,
15    /// Optional idempotency configuration override.
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub idempotency_config: Option<IdempotencyConfig>,
18}
19
20/// Override for default idempotency behavior on a connector node.
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
22pub struct IdempotencyConfig {
23    pub strategy: IdempotencyStrategy,
24}
25
26/// Idempotency strategy for a connector invocation.
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28#[serde(rename_all = "snake_case")]
29pub enum IdempotencyStrategy {
30    /// Use the ActionQueue RunId as the idempotency key (default).
31    RunId,
32}