pulsar_admin_rust/
namespaces.rs

1use 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 get_namespaces(&self, tenant: &str) -> Result<Vec<String>, Box<dyn Error>> {
16        let url_path = format!("{}/{}", URL_NAMESPACES, tenant);
17        let url = self.inner_http_client.base_url.join(&url_path).unwrap();
18        let response = self.inner_http_client.client.get(url).send().await?.text().await?;
19        let namespaces: Vec<String> = serde_json::from_str(&response)?;
20        Ok(namespaces)
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use crate::PulsarAdmin;
27
28    const PULSAR_HOST: &str = "127.0.0.1";
29    const PULSAR_PORT: u16 = 8080;
30
31    #[tokio::test]
32    async fn test_get_namespaces() {
33        let pulsar_admin = PulsarAdmin::new(PULSAR_HOST, PULSAR_PORT, None);
34        let namespaces_api = pulsar_admin.namespaces();
35        let namespaces = namespaces_api.get_namespaces("pulsar").await.unwrap();
36        assert!(!namespaces.is_empty(), "Namespaces list should not be empty");
37    }
38}