diff options
Diffstat (limited to 'cli/src/api/connection.rs')
-rw-r--r-- | cli/src/api/connection.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/cli/src/api/connection.rs b/cli/src/api/connection.rs new file mode 100644 index 0000000..f1d7f1c --- /dev/null +++ b/cli/src/api/connection.rs @@ -0,0 +1,36 @@ +// SPDX-FileCopyrightText: 2024 Eilertsens Kodeknekkeri +// SPDX-FileCopyrightText: 2024 Harald Eilertsen +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +use serde::{Deserialize, Serialize}; +use std::error::Error; + +pub struct Connection { + pub url: String, + pub jwt_token: String, +} + +impl Connection { + pub fn new<T: Into<String>>(url: T, jwt_token: T) -> Connection { + Connection { + url: url.into(), + jwt_token: jwt_token.into(), + } + } + + pub fn get<T: for <'de> Deserialize<'de>>(&self, resource: &str) -> Result<T, Box<dyn Error>> { + Ok(ureq::get(&format!("{}/{}", self.url, resource)) + .set("Accept", "application/json") + .call()? + .into_json()?) + } + + pub fn post<T: Serialize>(&self, resource: &str, data: &T) -> Result<String, Box<dyn Error>> { + Ok(ureq::post(&format!("{}/{}", self.url, resource)) + .set("Authorization", &format!("Bearer {}", self.jwt_token)) + .set("Content-Type", "application/json") + .send_json(&data)? + .into_string()?) + } +} |