use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use crate::Schema;
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct OperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub http: Option<HTTPOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ws: Option<WebSocketsOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub kafka: Option<KafkaOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub anypointmq: Option<AnyPointMQOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amqp: Option<AMQPOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub amqp1: Option<AMQP1OperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mqtt: Option<MQTTOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mqtt5: Option<MQTT5OperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub nats: Option<NATSOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub jms: Option<JMSOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sns: Option<SNSOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub solace: Option<SolaceOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sqs: Option<SQSOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub stomp: Option<STOMPOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis: Option<RedisOperationBinding>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mercure: Option<MercureOperationBinding>,
#[serde(flatten)]
pub extensions: IndexMap<String, serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct HTTPOperationBinding {
#[serde(rename = "type")]
pub typ: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub method: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub query: Option<Schema>,
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct WebSocketsOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct KafkaOperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub group_id: Option<Schema>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_id: Option<Schema>,
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct AnyPointMQOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct AMQPOperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub expiration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub cc: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub delivery_mode: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mandatory: Option<bool>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub bcc: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ack: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct AMQP1OperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct MQTTOperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub qos: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub retain: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct MQTT5OperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct NATSOperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub queue: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct JMSOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct SNSOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SolaceOperationBinding {
#[serde(skip_serializing_if = "Option::is_none")]
pub binding_version: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub destinations: Vec<SolaceDestination>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SolaceDestination {
#[serde(skip_serializing_if = "Option::is_none")]
destination_type: Option<SolaceDestinationType>,
#[serde(skip_serializing_if = "Option::is_none")]
delivery_mode: Option<SolaceDestinationDeliveryMode>,
#[serde(skip_serializing_if = "Option::is_none")]
queue: Option<SolaceDestinationQueue>,
#[serde(skip_serializing_if = "Option::is_none")]
topic: Option<SolaceDestinationTopic>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SolaceDestinationType {
Queue,
Topic,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SolaceDestinationDeliveryMode {
Direct,
Persistent,
}
impl Default for SolaceDestinationDeliveryMode {
fn default() -> Self {
SolaceDestinationDeliveryMode::Persistent
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SolaceDestinationQueue {
#[serde(skip_serializing_if = "Option::is_none")]
name: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
topic_subscriptions: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
access_type: Option<SolaceDestinationQueueAccessType>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum SolaceDestinationQueueAccessType {
Exclusive,
Nonexclusive,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SolaceDestinationTopic {
topic_subscriptions: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct SQSOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct STOMPOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct RedisOperationBinding {}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub struct MercureOperationBinding {}