use crate::commons::QueueType;
use crate::responses::VirtualHost;
use serde::Serialize;
#[derive(Serialize)]
pub struct VirtualHostParams<'a> {
pub name: &'a str,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<&'a str>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tags: Option<Vec<&'a str>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default_queue_type: Option<QueueType>,
pub tracing: bool,
}
impl<'a> VirtualHostParams<'a> {
pub fn named(name: &'a str) -> Self {
VirtualHostParams {
name,
description: None,
tags: None,
default_queue_type: None,
tracing: false,
}
}
pub fn builder(name: &'a str) -> VirtualHostParamsBuilder<'a> {
VirtualHostParamsBuilder::new(name)
}
pub fn with_description(mut self, description: &'a str) -> Self {
self.description = Some(description);
self
}
pub fn with_tags(mut self, tags: Vec<&'a str>) -> Self {
self.tags = Some(tags);
self
}
pub fn with_default_queue_type(mut self, queue_type: QueueType) -> Self {
self.default_queue_type = Some(queue_type);
self
}
pub fn with_tracing(mut self) -> Self {
self.tracing = true;
self
}
}
#[derive(Debug, Clone)]
#[must_use]
pub struct VirtualHostParamsBuilder<'a> {
name: &'a str,
description: Option<&'a str>,
tags: Option<Vec<&'a str>>,
default_queue_type: Option<QueueType>,
tracing: bool,
}
impl<'a> VirtualHostParamsBuilder<'a> {
pub fn new(name: &'a str) -> Self {
Self {
name,
description: None,
tags: None,
default_queue_type: None,
tracing: false,
}
}
pub fn description(mut self, description: &'a str) -> Self {
self.description = Some(description);
self
}
pub fn tags(mut self, tags: Vec<&'a str>) -> Self {
self.tags = Some(tags);
self
}
pub fn default_queue_type(mut self, queue_type: QueueType) -> Self {
self.default_queue_type = Some(queue_type);
self
}
pub fn tracing(mut self, enabled: bool) -> Self {
self.tracing = enabled;
self
}
pub fn build(self) -> VirtualHostParams<'a> {
VirtualHostParams {
name: self.name,
description: self.description,
tags: self.tags,
default_queue_type: self.default_queue_type,
tracing: self.tracing,
}
}
}
impl<'a> From<&'a VirtualHost> for VirtualHostParams<'a> {
fn from(vhost: &'a VirtualHost) -> Self {
Self {
name: &vhost.name,
description: vhost.description.as_deref(),
tags: vhost
.tags
.as_ref()
.map(|tags| tags.iter().map(|s| s.as_str()).collect()),
default_queue_type: vhost
.default_queue_type
.as_ref()
.map(|s| QueueType::from(s.as_str())),
tracing: false,
}
}
}