use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::protocol::command_custom_header::{CommandCustomHeader, FromMap};
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct DeleteTopicFromNamesrvRequestHeader {
pub topic: String,
pub cluster_name: Option<String>,
}
impl DeleteTopicFromNamesrvRequestHeader {
const TOPIC: &'static str = "topic";
const CLUSTER_NAME: &'static str = "clusterName";
pub fn new(topic: impl Into<String>, cluster_name: Option<impl Into<String>>) -> Self {
Self {
topic: topic.into(),
cluster_name: cluster_name.map(|s| s.into()),
}
}
}
impl CommandCustomHeader for DeleteTopicFromNamesrvRequestHeader {
fn to_map(&self) -> Option<HashMap<String, String>> {
let mut map = HashMap::from([(Self::TOPIC.to_string(), self.topic.clone())]);
if let Some(ref cluster_name) = self.cluster_name {
map.insert(Self::CLUSTER_NAME.to_string(), cluster_name.clone());
}
Some(map)
}
}
impl FromMap for DeleteTopicFromNamesrvRequestHeader {
type Target = Self;
fn from(map: &HashMap<String, String>) -> Option<Self::Target> {
Some(DeleteTopicFromNamesrvRequestHeader {
topic: map.get(Self::TOPIC).cloned().unwrap_or_default(),
cluster_name: map.get(Self::CLUSTER_NAME).map(|s| s.into()),
})
}
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct RegisterTopicRequestHeader {
pub topic: String,
}
impl RegisterTopicRequestHeader {
const TOPIC: &'static str = "topic";
pub fn new(topic: impl Into<String>) -> Self {
Self {
topic: topic.into(),
}
}
}
impl CommandCustomHeader for RegisterTopicRequestHeader {
fn to_map(&self) -> Option<HashMap<String, String>> {
let map = HashMap::from([(Self::TOPIC.to_string(), self.topic.clone())]);
Some(map)
}
}
impl FromMap for RegisterTopicRequestHeader {
type Target = Self;
fn from(map: &HashMap<String, String>) -> Option<Self::Target> {
Some(RegisterTopicRequestHeader {
topic: map.get(Self::TOPIC).cloned().unwrap_or_default(),
})
}
}
#[derive(Debug, Clone, Deserialize, Serialize, Default)]
pub struct GetTopicsByClusterRequestHeader {
pub cluster: String,
}
impl GetTopicsByClusterRequestHeader {
const CLUSTER: &'static str = "cluster";
pub fn new(cluster: impl Into<String>) -> Self {
Self {
cluster: cluster.into(),
}
}
}
impl CommandCustomHeader for GetTopicsByClusterRequestHeader {
fn to_map(&self) -> Option<HashMap<String, String>> {
let map = HashMap::from([(Self::CLUSTER.to_string(), self.cluster.clone())]);
Some(map)
}
}
impl FromMap for GetTopicsByClusterRequestHeader {
type Target = Self;
fn from(map: &HashMap<String, String>) -> Option<Self::Target> {
Some(GetTopicsByClusterRequestHeader {
cluster: map.get(Self::CLUSTER).cloned().unwrap_or_default(),
})
}
}