smbpndk_networking_project/
lib.rs1use anyhow::{anyhow, Result};
2use log::debug;
3use reqwest::Client;
4use smbpndk_model::{Project, ProjectCreate};
5use smbpndk_networking::{get_smb_token, smb_base_url_builder};
6
7pub async fn get_all() -> Result<Vec<Project>> {
8 let token = get_smb_token().await?;
10
11 debug!("Current token: {}", token);
12
13 let response = Client::new()
14 .get(build_project_url())
15 .header("Authorization", token)
16 .header("User-agent", "smbpndk-cli")
17 .send()
18 .await?;
19
20 match response.status() {
21 reqwest::StatusCode::OK => {
22 let projects: Vec<Project> = response.json().await?;
23 Ok(projects)
24 }
25 _ => Err(anyhow!("Failed to fetch projects.")),
26 }
27}
28
29pub async fn create_project(project: ProjectCreate) -> Result<Project> {
30 let token = get_smb_token().await?;
32
33 let response = Client::new()
34 .post(build_project_url())
35 .json(&project)
36 .header("Authorization", token)
37 .send()
38 .await?;
39
40 match response.status() {
41 reqwest::StatusCode::CREATED => {
42 let project: Project = response.json().await?;
43 Ok(project)
45 }
46 _ => Err(anyhow!("Failed to create a project.")),
47 }
48}
49
50pub async fn get_project(id: String) -> Result<Project> {
51 let token = get_smb_token().await?;
53
54 let response = Client::new()
55 .get(build_project_url_with_id(id))
56 .header("Authorization", token)
57 .send()
58 .await?;
59
60 match response.status() {
61 reqwest::StatusCode::OK => {
62 let project: Project = response.json().await?;
63 Ok(project)
65 }
66 _ => Err(anyhow!("Failed to request a project.")),
67 }
68}
69
70pub async fn delete_project(id: String) -> Result<()> {
71 let token = get_smb_token().await?;
73
74 let response = Client::new()
75 .delete(build_project_url_with_id(id))
76 .header("Authorization", token)
77 .send()
78 .await?;
79
80 match response.status() {
81 reqwest::StatusCode::OK => {
82 debug!("Project deleted.");
83 Ok(())
84 }
85 _ => Err(anyhow!("Failed to delete a project.")),
86 }
87}
88
89fn build_project_url() -> String {
92 let mut url_builder = smb_base_url_builder();
93 url_builder.add_route("v1/projects");
94 url_builder.build()
95}
96
97fn build_project_url_with_id(id: String) -> String {
98 let mut url_builder = smb_base_url_builder();
99 url_builder.add_route("v1/projects");
100 url_builder.add_route(id.as_str());
101 url_builder.build()
102}