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}