use std::sync::Arc;
use azure_core::http::Transport;
use super::http_client::FaultClient;
use super::rule::FaultInjectionRule;
pub struct FaultInjectionClientBuilder {
rules: Vec<Arc<FaultInjectionRule>>,
inner_client: Option<Arc<dyn azure_core::http::HttpClient>>,
}
impl FaultInjectionClientBuilder {
pub fn new() -> Self {
Self {
rules: Vec::new(),
inner_client: None,
}
}
pub fn with_rule(mut self, rule: Arc<FaultInjectionRule>) -> Self {
self.rules.push(rule);
self
}
pub(crate) fn rules(&self) -> &[Arc<FaultInjectionRule>] {
&self.rules
}
pub fn with_inner_client(mut self, client: Arc<dyn azure_core::http::HttpClient>) -> Self {
self.inner_client = Some(client);
self
}
pub fn build(self) -> Transport {
let inner_client = self
.inner_client
.unwrap_or_else(|| azure_core::http::new_http_client());
let fault_client = FaultClient::new(inner_client, self.rules);
Transport::new(Arc::new(fault_client))
}
}
impl Default for FaultInjectionClientBuilder {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::FaultInjectionClientBuilder;
#[test]
fn builder_default() {
let builder = FaultInjectionClientBuilder::default();
let _transport = builder.build();
}
}