queue_runtime/
provider.rs1use chrono::Duration;
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8pub enum ProviderType {
9 AzureServiceBus,
10 AwsSqs,
11 InMemory,
12}
13
14impl ProviderType {
15 pub fn supports_sessions(&self) -> SessionSupport {
17 match self {
18 Self::AzureServiceBus => SessionSupport::Native,
19 Self::AwsSqs => SessionSupport::Emulated, Self::InMemory => SessionSupport::Native,
21 }
22 }
23
24 pub fn supports_batching(&self) -> bool {
26 match self {
27 Self::AzureServiceBus => true,
28 Self::AwsSqs => true,
29 Self::InMemory => true,
30 }
31 }
32
33 pub fn max_message_size(&self) -> usize {
35 match self {
36 Self::AzureServiceBus => 1024 * 1024, Self::AwsSqs => 256 * 1024, Self::InMemory => 10 * 1024 * 1024, }
40 }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
45pub enum SessionSupport {
46 Native,
48 Emulated,
50 Unsupported,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56pub struct QueueConfig {
57 pub provider: ProviderConfig,
58 pub default_timeout: Duration,
59 pub max_retry_attempts: u32,
60 pub retry_base_delay: Duration,
61 pub enable_dead_letter: bool,
62}
63
64impl Default for QueueConfig {
65 fn default() -> Self {
66 Self {
67 provider: ProviderConfig::InMemory(InMemoryConfig::default()),
68 default_timeout: Duration::seconds(30),
69 max_retry_attempts: 3,
70 retry_base_delay: Duration::seconds(1),
71 enable_dead_letter: true,
72 }
73 }
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
78pub enum ProviderConfig {
79 AzureServiceBus(AzureServiceBusConfig),
80 AwsSqs(AwsSqsConfig),
81 InMemory(InMemoryConfig),
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct AzureServiceBusConfig {
87 pub connection_string: Option<String>,
88 pub namespace: Option<String>,
89 #[serde(skip, default = "default_auth_method")]
90 pub auth_method: crate::providers::AzureAuthMethod,
91 pub use_sessions: bool,
92 pub session_timeout: Duration,
93}
94
95fn default_auth_method() -> crate::providers::AzureAuthMethod {
96 crate::providers::AzureAuthMethod::DefaultCredential
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct AwsSqsConfig {
102 pub region: String,
103 pub access_key_id: Option<String>,
104 pub secret_access_key: Option<String>,
105 pub use_fifo_queues: bool,
106}
107
108#[derive(Debug, Clone, Serialize, Deserialize)]
110pub struct InMemoryConfig {
111 pub max_queue_size: usize,
112 pub enable_persistence: bool,
113 pub max_delivery_count: u32,
114 pub default_message_ttl: Option<Duration>,
115 pub enable_dead_letter_queue: bool,
116 pub session_lock_duration: Duration,
117}
118
119impl Default for InMemoryConfig {
120 fn default() -> Self {
121 Self {
122 max_queue_size: 10000,
123 enable_persistence: false,
124 max_delivery_count: 3,
125 default_message_ttl: None,
126 enable_dead_letter_queue: true,
127 session_lock_duration: Duration::minutes(5),
128 }
129 }
130}
131
132#[cfg(test)]
133#[path = "provider_tests.rs"]
134mod tests;