Skip to main content

agentmail/client/
pods.rs

1use crate::client::NoBody;
2use crate::{Client, Error, Page, types::*, util::urlish};
3
4impl Client {
5    /// POST /v0/pods, create a pod.
6    pub async fn create_pod(&self, pod: CreatePod) -> Result<Pod, Error> {
7        self.request(reqwest::Method::POST, "/v0/pods", &[], Some(&pod))
8            .await
9    }
10
11    /// GET /v0/pods, one page.
12    pub async fn list_pods(&self, page: Page) -> Result<PodList, Error> {
13        self.request(
14            reqwest::Method::GET,
15            "/v0/pods",
16            &page.query(),
17            None::<&NoBody>,
18        )
19        .await
20    }
21
22    /// Every pod, draining pagination.
23    pub async fn list_all_pods(&self) -> Result<Vec<Pod>, Error> {
24        let mut out = Vec::new();
25        let mut token = None;
26        loop {
27            let resp = self
28                .list_pods(Page {
29                    limit: None,
30                    page_token: token,
31                })
32                .await?;
33            let next = resp.next_page_token;
34            out.extend(resp.pods);
35            match next {
36                Some(t) => token = Some(t),
37                None => return Ok(out),
38            }
39        }
40    }
41
42    /// GET /v0/pods/{pod_id}
43    pub async fn get_pod(&self, pod_id: &str) -> Result<Pod, Error> {
44        self.request(
45            reqwest::Method::GET,
46            &format!("/v0/pods/{}", urlish(pod_id)),
47            &[],
48            None::<&NoBody>,
49        )
50        .await
51    }
52
53    /// DELETE /v0/pods/{pod_id}
54    pub async fn delete_pod(&self, pod_id: &str) -> Result<(), Error> {
55        self.request(
56            reqwest::Method::DELETE,
57            &format!("/v0/pods/{}", urlish(pod_id)),
58            &[],
59            None::<&NoBody>,
60        )
61        .await
62    }
63}