pulsar_admin/
namespaces.rs1use std::error::Error;
2
3use crate::inner_http_client::InnerHttpClient;
4use crate::url_constants::URL_NAMESPACES;
5
6pub struct Namespaces<'a> {
7 inner_http_client: &'a InnerHttpClient,
8}
9
10impl<'a> Namespaces<'a> {
11 pub fn new(inner_http_client: &'a InnerHttpClient) -> Self {
12 Namespaces { inner_http_client }
13 }
14
15 pub async fn create_namespace(&self, tenant: &str, namespace: &str) -> Result<(), Box<dyn Error>> {
16 let url_path = format!("{}/{}/{}", URL_NAMESPACES, tenant, namespace);
17 let url = self.inner_http_client.base_url.join(&url_path).unwrap();
18 self.inner_http_client.client.put(url).send().await?;
19 Ok(())
20 }
21
22 pub async fn delete_namespace(&self, tenant: &str, namespace: &str) -> Result<(), Box<dyn Error>> {
23 let url_path = format!("{}/{}/{}", URL_NAMESPACES, tenant, namespace);
24 let url = self.inner_http_client.base_url.join(&url_path).unwrap();
25 self.inner_http_client.client.delete(url).send().await?;
26 Ok(())
27 }
28
29 pub async fn list_namespaces(&self, tenant: &str) -> Result<Vec<String>, Box<dyn Error>> {
30 let url_path = format!("{}/{}", URL_NAMESPACES, tenant);
31 let response = self.inner_http_client.get(url_path.as_str()).await?;
32 let namespaces: Vec<String> = serde_json::from_str(&response)?;
33 Ok(namespaces)
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use crate::PulsarAdmin;
40
41 const PULSAR_HOST: &str = "127.0.0.1";
42 const PULSAR_PORT: u16 = 8080;
43
44 #[tokio::test]
45 async fn test_get_namespaces() {
46 let pulsar_admin = PulsarAdmin::new(PULSAR_HOST, PULSAR_PORT, None);
47 let namespaces_api = pulsar_admin.namespaces();
48 let namespaces = namespaces_api.list_namespaces("pulsar").await.unwrap();
49 assert!(!namespaces.is_empty(), "Namespaces list should not be empty");
50 }
51}