1use wadm_types::api::{DEFAULT_WADM_TOPIC_PREFIX, WADM_STATUS_API_PREFIX};
2
3pub struct TopicGenerator {
5 topic_prefix: String,
6 model_prefix: String,
7}
8
9impl TopicGenerator {
10 pub fn new(lattice: &str, prefix: Option<&str>) -> TopicGenerator {
12 let topic_prefix = format!(
13 "{}.{}",
14 prefix.unwrap_or(DEFAULT_WADM_TOPIC_PREFIX),
15 lattice
16 );
17 let model_prefix = format!("{}.model", topic_prefix);
18 TopicGenerator {
19 topic_prefix,
20 model_prefix,
21 }
22 }
23
24 pub fn prefix(&self) -> &str {
26 &self.topic_prefix
27 }
28
29 pub fn model_prefix(&self) -> &str {
32 &self.model_prefix
33 }
34
35 pub fn model_put_topic(&self) -> String {
37 format!("{}.put", self.model_prefix())
38 }
39
40 pub fn model_get_topic(&self, model_name: &str) -> String {
42 format!("{}.get.{model_name}", self.model_prefix())
43 }
44
45 pub fn model_delete_topic(&self, model_name: &str) -> String {
47 format!("{}.del.{model_name}", self.model_prefix())
48 }
49
50 pub fn model_list_topic(&self) -> String {
52 format!("{}.list", self.model_prefix())
53 }
54
55 pub fn model_versions_topic(&self, model_name: &str) -> String {
57 format!("{}.versions.{model_name}", self.model_prefix())
58 }
59
60 pub fn model_deploy_topic(&self, model_name: &str) -> String {
62 format!("{}.deploy.{model_name}", self.model_prefix())
63 }
64
65 pub fn model_undeploy_topic(&self, model_name: &str) -> String {
67 format!("{}.undeploy.{model_name}", self.model_prefix())
68 }
69
70 pub fn model_status_topic(&self, model_name: &str) -> String {
72 format!("{}.status.{model_name}", self.model_prefix())
73 }
74
75 pub fn wadm_status_topic(&self, app_name: &str) -> String {
77 let lattice = self.topic_prefix.split('.').last().unwrap_or("default");
79 format!("{}.{}.{}", WADM_STATUS_API_PREFIX, lattice, app_name)
80 }
81}