Skip to main content

context69_sdk/client/groups/
source_folders.rs

1use context69_contracts::{
2    CreateSourceFolderRequest, SourceConfigInput, SourceFolderResponse, SyncOutcome,
3};
4use reqwest::Method;
5use uuid::Uuid;
6
7use super::Context69Client;
8use crate::{Error, client::transport::group_path};
9
10pub struct GroupSourceFoldersApi<'a> {
11    client: &'a Context69Client,
12    group_path: String,
13}
14
15impl<'a> GroupSourceFoldersApi<'a> {
16    pub(super) fn new(client: &'a Context69Client, group_path: String) -> Self {
17        Self { client, group_path }
18    }
19
20    pub async fn create(
21        &self,
22        request: &CreateSourceFolderRequest,
23    ) -> Result<SourceFolderResponse, Error> {
24        let path = group_path(&self.group_path, "/source-folders");
25        self.client
26            .execute_json(
27                self.client
28                    .authorized_request(Method::POST, &path)
29                    .await?
30                    .json(request),
31            )
32            .await
33    }
34}
35
36pub struct GroupSourceFolderApi<'a> {
37    client: &'a Context69Client,
38    group_path: String,
39    folder_id: Uuid,
40}
41
42impl<'a> GroupSourceFolderApi<'a> {
43    pub(super) fn new(client: &'a Context69Client, group_path: String, folder_id: Uuid) -> Self {
44        Self {
45            client,
46            group_path,
47            folder_id,
48        }
49    }
50
51    pub async fn update(&self, request: &SourceConfigInput) -> Result<SourceFolderResponse, Error> {
52        let suffix = format!("/source-folders/{}/config", self.folder_id);
53        let path = group_path(&self.group_path, &suffix);
54        self.client
55            .execute_json(
56                self.client
57                    .authorized_request(Method::PUT, &path)
58                    .await?
59                    .json(request),
60            )
61            .await
62    }
63
64    pub async fn sync(&self) -> Result<SyncOutcome, Error> {
65        let suffix = format!("/source-folders/{}/sync", self.folder_id);
66        let path = group_path(&self.group_path, &suffix);
67        self.client
68            .execute_json(self.client.authorized_request(Method::POST, &path).await?)
69            .await
70    }
71}