use crate::commons::{Username, VirtualHostName};
use serde::{Deserialize, Serialize};
use serde_json::Map;
#[cfg(feature = "tabled")]
use tabled::Tabled;
#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct Permissions {
pub user: Username,
pub vhost: VirtualHostName,
pub configure: String,
pub read: String,
pub write: String,
}
#[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)]
#[cfg_attr(feature = "tabled", derive(Tabled))]
#[allow(dead_code)]
pub struct TopicPermission {
pub user: Username,
pub vhost: VirtualHostName,
pub exchange: String,
pub read: String,
pub write: String,
}
impl Permissions {
pub fn with_username(&self, username: &str) -> Self {
Permissions {
user: username.to_owned(),
vhost: self.vhost.clone(),
configure: self.configure.clone(),
read: self.read.clone(),
write: self.write.clone(),
}
}
pub fn to_request(&self) -> crate::requests::Permissions<'_> {
crate::requests::Permissions {
user: &self.user,
vhost: &self.vhost,
configure: &self.configure,
read: &self.read,
write: &self.write,
}
}
}
#[derive(Debug, Deserialize, Clone, Eq, PartialEq, Default)]
#[serde(transparent)]
pub struct TagMap(pub Map<String, serde_json::Value>);