use super::BindingValue;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(tag = "service", rename_all = "lowercase")]
pub enum QueueBinding {
#[serde(rename_all = "camelCase")]
Sqs(SqsQueueBinding),
#[serde(rename_all = "camelCase")]
Pubsub(PubSubQueueBinding),
#[serde(rename_all = "camelCase")]
Servicebus(ServiceBusQueueBinding),
#[serde(rename = "local-queue", rename_all = "camelCase")]
Local(LocalQueueBinding),
}
impl QueueBinding {
pub fn sqs(queue_url: impl Into<BindingValue<String>>) -> Self {
Self::Sqs(SqsQueueBinding {
queue_url: queue_url.into(),
})
}
pub fn pubsub(
topic: impl Into<BindingValue<String>>,
subscription: impl Into<BindingValue<String>>,
) -> Self {
Self::Pubsub(PubSubQueueBinding {
topic: topic.into(),
subscription: subscription.into(),
})
}
pub fn service_bus(
namespace: impl Into<BindingValue<String>>,
queue_name: impl Into<BindingValue<String>>,
) -> Self {
Self::Servicebus(ServiceBusQueueBinding {
namespace: namespace.into(),
queue_name: queue_name.into(),
})
}
pub fn local(queue_path: impl Into<BindingValue<String>>) -> Self {
Self::Local(LocalQueueBinding {
queue_path: queue_path.into(),
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct SqsQueueBinding {
pub queue_url: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct PubSubQueueBinding {
pub topic: BindingValue<String>,
pub subscription: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct ServiceBusQueueBinding {
pub namespace: BindingValue<String>,
pub queue_name: BindingValue<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "openapi", derive(utoipa::ToSchema))]
#[cfg_attr(feature = "jsonschema", derive(schemars::JsonSchema))]
#[serde(rename_all = "camelCase")]
pub struct LocalQueueBinding {
pub queue_path: BindingValue<String>,
}