use serde::{Deserialize, Serialize};
use super::{operations::IntermediateArgument, types::IntermediateDeprecation};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateSubscription {
pub name: String,
pub return_type: String,
#[serde(default)]
pub arguments: Vec<IntermediateArgument>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub topic: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filter: Option<IntermediateSubscriptionFilter>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub fields: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub deprecated: Option<IntermediateDeprecation>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateSubscriptionFilter {
pub conditions: Vec<IntermediateFilterCondition>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateFilterCondition {
pub argument: String,
pub path: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct IntermediateObserver {
pub name: String,
pub entity: String,
pub event: String,
pub actions: Vec<IntermediateObserverAction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub condition: Option<String>,
pub retry: IntermediateRetryConfig,
}
pub type IntermediateObserverAction = serde_json::Value;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct IntermediateRetryConfig {
pub max_attempts: u32,
pub backoff_strategy: String,
pub initial_delay_ms: u32,
pub max_delay_ms: u32,
}