eagle_api/api/folder/
create.rs1use 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}