rabbitmq_management_client/
lib.rs1use crate::{
2 config::RabbitMqConfiguration, errors::RabbitMqClientError,
3 middlewares::authentication::AuthenticationMiddleware,
4};
5use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
6
7pub mod api;
8pub mod config;
9pub mod errors;
10mod middlewares;
11
12#[derive(Clone)]
13pub struct RabbitMqClient {
14 pub api_url: String,
15 pub client: ClientWithMiddleware,
16}
17
18pub struct RabbitMqClientBuilder {
19 config: RabbitMqConfiguration,
20 preset_client: Option<ClientWithMiddleware>,
21}
22
23impl RabbitMqClientBuilder {
24 pub fn new(config: RabbitMqConfiguration) -> Self {
25 Self {
26 config,
27 preset_client: None,
28 }
29 }
30
31 pub fn preset_client(mut self, client: ClientWithMiddleware) -> Self {
32 self.preset_client = Some(client);
33 self
34 }
35
36 #[tracing::instrument(skip(self))]
37 pub fn build(self) -> Result<RabbitMqClient, RabbitMqClientError> {
38 let client_builder = match self.preset_client {
39 None => ClientBuilder::new(reqwest::Client::new()),
40 Some(c) => ClientBuilder::from_client(c),
41 };
42
43 if self.config.rabbitmq_username.is_empty() || self.config.rabbitmq_password.is_empty() {
44 return Err(RabbitMqClientError::MissingCredentials);
45 }
46
47 let client = client_builder
48 .with(AuthenticationMiddleware {
49 username: self.config.rabbitmq_username,
50 password: self.config.rabbitmq_password,
51 })
52 .build();
53
54 Ok(RabbitMqClient {
55 api_url: self.config.rabbitmq_api_url,
56 client,
57 })
58 }
59}