amqp_client_rust/domain/
config.rs1use 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#[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}