use std::fmt;
use std::ops::Deref;
use crate::commons::VirtualHostName;
use crate::formatting::*;
use serde::{Deserialize, Serialize};
use serde_json::Map;
use super::TagList;
#[cfg(feature = "tabled")]
use tabled::Tabled;
#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq)]
#[allow(dead_code)]
pub struct VirtualHostMetadata {
pub tags: Option<TagList>,
pub description: Option<String>,
pub default_queue_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct VirtualHost {
pub name: VirtualHostName,
#[cfg_attr(feature = "tabled", tabled(display = "display_option"))]
pub tags: Option<TagList>,
#[cfg_attr(feature = "tabled", tabled(display = "display_option"))]
pub description: Option<String>,
#[cfg_attr(feature = "tabled", tabled(display = "display_option"))]
pub default_queue_type: Option<String>,
#[cfg_attr(feature = "tabled", tabled(skip))]
pub metadata: Option<VirtualHostMetadata>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct EnforcedLimits(pub Map<String, serde_json::Value>);
impl Deref for EnforcedLimits {
type Target = Map<String, serde_json::Value>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl fmt::Display for EnforcedLimits {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
fmt_map_as_colon_separated_pairs(f, &self.0)
}
}
#[derive(Debug, Deserialize, Clone)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct VirtualHostLimits {
pub vhost: VirtualHostName,
#[serde(rename(deserialize = "value"))]
pub limits: EnforcedLimits,
}