eagle_api/api/folder/
create.rs

1use serde::{Deserialize, Serialize};
2
3use crate::{data::FolderId, EagleApi, EagleResponse, Result};
4
5#[derive(Debug, Serialize)]
6#[serde(rename_all = "camelCase")]
7struct FolderCreateRequest {
8    folder_name: String,
9    parent: Option<FolderId>,
10}
11
12#[derive(Debug, Deserialize)]
13#[serde(rename_all = "camelCase")]
14struct FolderCreateResponse {
15    id: FolderId,
16}
17
18impl EagleApi {
19    pub async fn folder_create(
20        &self,
21        name: impl Into<String>,
22        parent: impl Into<Option<FolderId>>,
23    ) -> Result<FolderId> {
24        let url = format!("{}/api/folder/create", self.inner.host);
25
26        let request = FolderCreateRequest {
27            folder_name: name.into(),
28            parent: parent.into(),
29        };
30
31        let resp = self.inner.client.post(&url).json(&request).send().await?;
32        println!("{}", resp.text().await?);
33
34        let resp: EagleResponse<FolderCreateResponse> = self
35            .inner
36            .client
37            .post(&url)
38            .json(&request)
39            .send()
40            .await?
41            .json()
42            .await?;
43
44        Ok(resp.ok()?.id)
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use std::env::var;
51
52    use super::*;
53
54    #[tokio::test]
55    #[ignore]
56    async fn test_folder_create() {
57        let api = EagleApi::new(&var("EAGLE_API_TEST_HOST").unwrap());
58        let folders = api.folder_list().await.unwrap();
59        let resp = api
60            .folder_create("test".to_string(), folders[0].id.clone())
61            .await;
62        resp.unwrap();
63    }
64}