Skip to main content

amqp_client_rust/domain/
config.rs

1use url::Url;
2
3
4#[cfg(feature = "tls")]
5pub type TlsAdaptor = amqprs::tls::TlsAdaptor;
6
7#[derive(Clone)]
8pub struct Config {
9    pub host: String,
10    pub port: u16,
11    pub username: String,
12    pub password: String,
13    pub virtual_host: String,
14    pub options: ConfigOptions,
15    #[cfg(feature = "tls")]
16    pub tls_adaptor: Option<TlsAdaptor>,
17}
18impl Config {
19    pub fn from_url(
20        url: &str,
21        options: ConfigOptions,
22        #[cfg(feature = "tls")]
23        tls_adaptor: Option<TlsAdaptor>,
24    ) -> Result<Config, Box<dyn std::error::Error>> {
25        let parsed_url = Url::parse(url)?;
26        let host = parsed_url.host_str().ok_or("No host in URL")?.to_string();
27        let port = parsed_url.port().unwrap_or(5672);
28        let username = parsed_url.username().to_string();
29        let password = parsed_url.password().unwrap_or("").to_string();
30        let virtual_host = parsed_url.path().trim_start_matches('/').to_string();
31        Ok(Config {
32            host,
33            port,
34            username,
35            password,
36            options,
37            virtual_host,
38            #[cfg(feature = "tls")]
39            tls_adaptor,
40        })
41    }
42
43    pub fn new(
44        host: &str,
45        port: u16,
46        username: &str,
47        password: &str,
48        options: ConfigOptions,
49        virtual_host: &str,
50        #[cfg(feature = "tls")]
51        tls_adaptor: Option<TlsAdaptor>,
52    ) -> Config {
53        Config {
54            host: host.into(),
55            port,
56            username: username.into(),
57            password: password.into(),
58            options,
59            virtual_host: virtual_host.into(),
60            #[cfg(feature = "tls")]
61            tls_adaptor,
62        }
63    }
64}
65// Placeholder for ConfigOptions struct
66#[derive(Debug, Clone, PartialEq, Eq)]
67pub struct ConfigOptions {
68    pub rpc_queue_name: String,
69    pub rpc_exchange_name: String,
70    pub queue_name: String,
71}
72
73#[derive(Debug, Clone, Copy, PartialEq, Eq)]
74pub struct QoSConfig {
75    pub pub_confirm: bool,
76    pub rpc_client_confirm: bool,
77    pub rpc_server_confirm: bool,
78    pub sub_auto_ack: bool,
79    pub rpc_server_auto_ack: bool,
80    pub rpc_client_auto_ack: bool,
81    pub sub_prefetch: Option<u16>,
82    pub rpc_server_prefetch: Option<u16>,
83    pub rpc_client_prefetch: Option<u16>,
84}
85impl QoSConfig {
86    pub fn new(
87        pub_confirm: bool,
88        rpc_client_confirm: bool,
89        rpc_server_confirm: bool,
90        sub_auto_ack: bool,
91        rpc_server_auto_ack: bool,
92        rpc_client_auto_ack: bool,
93        sub_prefetch: Option<u16>,
94        rpc_server_prefetch: Option<u16>,
95        rpc_client_prefetch: Option<u16>,
96    ) -> Self {
97        Self {
98            pub_confirm,
99            rpc_client_confirm,
100            rpc_server_confirm,
101            sub_auto_ack,
102            rpc_server_auto_ack,
103            rpc_client_auto_ack,
104            sub_prefetch,
105            rpc_server_prefetch,
106            rpc_client_prefetch,
107        }
108    }
109}
110
111impl Default for QoSConfig {
112    fn default() -> Self {
113        Self {
114            pub_confirm: true,
115            rpc_client_confirm: true,
116            rpc_server_confirm: false,
117            sub_auto_ack: false,
118            rpc_server_auto_ack: false,
119            rpc_client_auto_ack: false,
120            sub_prefetch: None,
121            rpc_server_prefetch: None,
122            rpc_client_prefetch: None,
123        }
124    }
125}