use bytes::Bytes;
use tracing::info;
use crate::definitions::management::ManagementClient;
use crate::definitions::types::RabbitMqDefinitions;
use crate::error::Result;
pub struct DefinitionsExporter {
client: ManagementClient,
}
impl DefinitionsExporter {
pub fn new(client: ManagementClient) -> Self {
Self { client }
}
pub async fn export(&self, vhost: Option<&str>) -> Result<RabbitMqDefinitions> {
let definitions = self.client.export_definitions(vhost).await?;
info!(
"Exported definitions: {} users, {} vhosts, {} queues, {} exchanges, {} bindings",
definitions.users.len(),
definitions.vhosts.len(),
definitions.queues.len(),
definitions.exchanges.len(),
definitions.bindings.len(),
);
Ok(definitions)
}
pub async fn export_json(&self, vhost: Option<&str>) -> Result<Bytes> {
let definitions = self.export(vhost).await?;
let json = serde_json::to_vec_pretty(&definitions)?;
Ok(Bytes::from(json))
}
}