use ureq::AgentBuilder;
use crate::{
common::{
builder::{builder_options::BuilderOptions, error::BuilderError},
cobbler::Cobbler,
error::Error,
traits::backend_builder_trait_sync::BackendBuilderTraitSync,
},
error::{
payload::{events::Event, notifier::Notifier, Payload},
ureq::client::blocking::UreqErrorSync,
},
};
pub struct ClientBuilderUreqErrorSync {
pub client_builder: AgentBuilder,
pub(crate) options: BuilderOptions,
pub(crate) api_key: Option<String>,
pub(crate) payload_version: String,
pub(crate) notifier: Option<Notifier>,
pub(crate) events: Option<Vec<Event>>,
}
impl BackendBuilderTraitSync<UreqErrorSync, Error>
for ClientBuilderUreqErrorSync
{
fn build(self) -> Result<UreqErrorSync, Error> {
let mut missing_fields: Vec<String> = Vec::new();
if self.notifier.is_none() {
missing_fields.push("notifier".to_string());
}
if self.events.is_none() {
missing_fields.push("events".to_string());
}
if missing_fields.len() == 0 {
let url = Cobbler::cobble(self.options.clone())?;
let mut request = self.client_builder.build().post(url.as_str());
match self.options.headers {
Some(headers) => {
for (header, value) in headers.into_iter() {
request = request.set(header.as_str(), value.as_str());
}
}
None => (),
};
let payload = Payload {
api_key: self.api_key,
payload_version: self.payload_version,
notifier: self.notifier.unwrap(),
events: self.events.unwrap(),
};
Ok(UreqErrorSync { url, request, payload })
} else {
Err(BuilderError::MissingField {
context: "BackendBuilderTrait<UreqErrorSync, Error>"
.to_string(),
fields: missing_fields,
}
.into())
}
}
}