use crate::{
administration::RuleProperties,
amqp::{
amqp_request_message::add_rule::CreateRuleFilter,
amqp_rule_manager::AmqpRuleManager,
},
core::TransportRuleManager, util::IntoAzureCoreError,
};
#[derive(Debug)]
pub struct ServiceBusRuleManager {
pub(crate) inner: AmqpRuleManager,
}
impl ServiceBusRuleManager {
const MAX_RULES_PER_REQUEST: i32 = 100;
pub fn identifier(&self) -> &str {
self.inner.identifier()
}
pub fn subscription_path(&self) -> &str {
self.inner.subscription_path()
}
pub async fn dispose(self) -> Result<(), azure_core::Error> {
self.inner.close().await.map_err(IntoAzureCoreError::into_azure_core_error)
}
pub async fn create_rule(
&mut self,
name: impl Into<String>,
filter: impl Into<CreateRuleFilter>,
) -> Result<(), azure_core::Error> {
self.inner.create_rule(name.into(), filter.into()).await.map_err(Into::into)
}
pub async fn delete_rule(
&mut self,
rule_name: impl Into<String>,
) -> Result<(), azure_core::Error> {
self.inner.delete_rule(rule_name.into()).await.map_err(Into::into)
}
pub async fn get_rules(
&mut self,
) -> Result<Vec<RuleProperties>, azure_core::Error> {
let mut skip = 0;
let mut buffer = Vec::new();
loop {
let rule_descriptions = self
.inner
.get_rules(skip, Self::MAX_RULES_PER_REQUEST)
.await?;
let len = rule_descriptions.len();
skip += len as i32;
buffer.extend(rule_descriptions);
if len < Self::MAX_RULES_PER_REQUEST as usize {
break;
}
}
Ok(buffer)
}
}