use alloc::{string::String, vec::Vec};
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub enum EventProviderKind {
Broker,
Source,
Sink,
Bridge,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub enum TransportKind {
Nats,
Kafka,
Sqs,
Webhook,
Email,
Other(String),
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub enum ReliabilityKind {
AtMostOnce,
AtLeastOnce,
EffectivelyOnce,
}
#[derive(Clone, Debug, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub enum OrderingKind {
None,
PerKey,
Global,
}
#[derive(Clone, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct EventProviderDescriptor {
pub name: String,
pub kind: EventProviderKind,
pub transport: TransportKind,
pub reliability: ReliabilityKind,
pub ordering: OrderingKind,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub notes: Option<String>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Vec::is_empty")
)]
pub tags: Vec<String>,
}
impl Default for EventProviderDescriptor {
fn default() -> Self {
Self {
name: "provider".into(),
kind: EventProviderKind::Broker,
transport: TransportKind::Other("unspecified".into()),
reliability: ReliabilityKind::AtMostOnce,
ordering: OrderingKind::None,
notes: None,
tags: Vec::new(),
}
}
}