use wadm_types::api::{DEFAULT_WADM_TOPIC_PREFIX, WADM_STATUS_API_PREFIX};
pub struct TopicGenerator {
topic_prefix: String,
model_prefix: String,
}
impl TopicGenerator {
pub fn new(lattice: &str, prefix: Option<&str>) -> TopicGenerator {
let topic_prefix = format!(
"{}.{}",
prefix.unwrap_or(DEFAULT_WADM_TOPIC_PREFIX),
lattice
);
let model_prefix = format!("{}.model", topic_prefix);
TopicGenerator {
topic_prefix,
model_prefix,
}
}
pub fn prefix(&self) -> &str {
&self.topic_prefix
}
pub fn model_prefix(&self) -> &str {
&self.model_prefix
}
pub fn model_put_topic(&self) -> String {
format!("{}.put", self.model_prefix())
}
pub fn model_get_topic(&self, model_name: &str) -> String {
format!("{}.get.{model_name}", self.model_prefix())
}
pub fn model_delete_topic(&self, model_name: &str) -> String {
format!("{}.del.{model_name}", self.model_prefix())
}
pub fn model_list_topic(&self) -> String {
format!("{}.list", self.model_prefix())
}
pub fn model_versions_topic(&self, model_name: &str) -> String {
format!("{}.versions.{model_name}", self.model_prefix())
}
pub fn model_deploy_topic(&self, model_name: &str) -> String {
format!("{}.deploy.{model_name}", self.model_prefix())
}
pub fn model_undeploy_topic(&self, model_name: &str) -> String {
format!("{}.undeploy.{model_name}", self.model_prefix())
}
pub fn model_status_topic(&self, model_name: &str) -> String {
format!("{}.status.{model_name}", self.model_prefix())
}
pub fn wadm_status_topic(&self, app_name: &str) -> String {
let lattice = self.topic_prefix.split('.').last().unwrap_or("default");
format!("{}.{}.{}", WADM_STATUS_API_PREFIX, lattice, app_name)
}
}