Skip to main content

alien_core/bindings/
queue.rs

1use super::BindingValue;
2use serde::{Deserialize, Serialize};
3
4/// Binding parameters for Queue at runtime or in templates.
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
7#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
8#[serde(tag = "service", rename_all = "lowercase")]
9pub enum QueueBinding {
10    /// AWS SQS binding
11    #[serde(rename_all = "camelCase")]
12    Sqs(SqsQueueBinding),
13    /// GCP Pub/Sub binding
14    #[serde(rename_all = "camelCase")]
15    Pubsub(PubSubQueueBinding),
16    /// Azure Service Bus binding
17    #[serde(rename_all = "camelCase")]
18    Servicebus(ServiceBusQueueBinding),
19}
20
21impl QueueBinding {
22    pub fn sqs(queue_url: impl Into<BindingValue<String>>) -> Self {
23        Self::Sqs(SqsQueueBinding {
24            queue_url: queue_url.into(),
25        })
26    }
27
28    pub fn pubsub(
29        topic: impl Into<BindingValue<String>>,
30        subscription: impl Into<BindingValue<String>>,
31    ) -> Self {
32        Self::Pubsub(PubSubQueueBinding {
33            topic: topic.into(),
34            subscription: subscription.into(),
35        })
36    }
37
38    pub fn service_bus(
39        namespace: impl Into<BindingValue<String>>,
40        queue_name: impl Into<BindingValue<String>>,
41    ) -> Self {
42        Self::Servicebus(ServiceBusQueueBinding {
43            namespace: namespace.into(),
44            queue_name: queue_name.into(),
45        })
46    }
47}
48
49/// AWS SQS queue parameters
50#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
51#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
52#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
53#[serde(rename_all = "camelCase")]
54pub struct SqsQueueBinding {
55    /// Full SQS queue URL
56    pub queue_url: BindingValue<String>,
57}
58
59/// GCP Pub/Sub parameters
60#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
62#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
63#[serde(rename_all = "camelCase")]
64pub struct PubSubQueueBinding {
65    /// Full topic name: projects/{project}/topics/{topic}
66    pub topic: BindingValue<String>,
67    /// Full subscription name: projects/{project}/subscriptions/{subscription}
68    pub subscription: BindingValue<String>,
69}
70
71/// Azure Service Bus parameters
72#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
73#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
74#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
75#[serde(rename_all = "camelCase")]
76pub struct ServiceBusQueueBinding {
77    /// Namespace name
78    pub namespace: BindingValue<String>,
79    /// Queue name
80    pub queue_name: BindingValue<String>,
81}