use nanocl_error::http_client::HttpClientResult;
use nanocl_stubs::{
generic::GenericFilter,
namespace::{
Namespace, NamespaceInspect, NamespacePartial, NamespaceSummary,
},
};
use super::http_client::NanocldClient;
impl NanocldClient {
const NAMESPACE_PATH: &'static str = "/namespaces";
pub async fn list_namespace(
&self,
query: Option<&GenericFilter>,
) -> HttpClientResult<Vec<NamespaceSummary>> {
let query = Self::convert_query(query)?;
let res = self.send_get(Self::NAMESPACE_PATH, Some(query)).await?;
Self::res_json(res).await
}
pub async fn create_namespace(
&self,
name: &str,
) -> HttpClientResult<Namespace> {
let new_item = NamespacePartial {
name: name.to_owned(),
metadata: None,
};
let res = self
.send_post(Self::NAMESPACE_PATH, Some(new_item), None::<String>)
.await?;
Self::res_json(res).await
}
pub async fn inspect_namespace(
&self,
name: &str,
) -> HttpClientResult<NamespaceInspect> {
let res = self
.send_get(
&format!("{}/{name}/inspect", Self::NAMESPACE_PATH),
None::<String>,
)
.await?;
Self::res_json(res).await
}
pub async fn delete_namespace(&self, name: &str) -> HttpClientResult<()> {
self
.send_delete(&format!("{}/{name}", Self::NAMESPACE_PATH), None::<String>)
.await?;
Ok(())
}
}
#[cfg(test)]
mod tests {
use crate::ConnectOpts;
use super::*;
#[ntex::test]
async fn basic() {
const NAMESPACE: &str = "clientnt";
let client = NanocldClient::connect_to(&ConnectOpts {
url: "http://nanocl.internal:8585".into(),
..Default::default()
})
.expect("Failed to create a nanocl client");
client.list_namespace(None).await.unwrap();
let namespace = client.create_namespace(NAMESPACE).await.unwrap();
assert_eq!(namespace.name, NAMESPACE);
let namespace = client.inspect_namespace(NAMESPACE).await.unwrap();
assert_eq!(namespace.name, NAMESPACE);
client.delete_namespace(NAMESPACE).await.unwrap();
}
}