feat: add klog
This commit is contained in:
79
cli/src/client.rs
Normal file
79
cli/src/client.rs
Normal file
@@ -0,0 +1,79 @@
|
||||
use anyhow::{Context, Result};
|
||||
use klog_types::{BatchFilesRequest, FilesMetaResponse};
|
||||
use crate::config::Config;
|
||||
|
||||
pub struct KlogClient {
|
||||
base_url: String,
|
||||
token: String,
|
||||
client: reqwest::Client,
|
||||
}
|
||||
|
||||
impl KlogClient {
|
||||
pub fn new(config: &Config) -> Self {
|
||||
Self {
|
||||
base_url: config.url.trim_end_matches('/').to_string(),
|
||||
token: config.token.clone(),
|
||||
client: reqwest::Client::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn list_files(&self) -> Result<FilesMetaResponse> {
|
||||
Ok(self
|
||||
.client
|
||||
.get(format!("{}/admin/files", self.base_url))
|
||||
.bearer_auth(&self.token)
|
||||
.send()
|
||||
.await?
|
||||
.error_for_status()?
|
||||
.json::<FilesMetaResponse>()
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn get_files(&self, req: &BatchFilesRequest) -> Result<Vec<u8>> {
|
||||
Ok(self
|
||||
.client
|
||||
.post(format!("{}/admin/files/get", self.base_url))
|
||||
.bearer_auth(&self.token)
|
||||
.json(req)
|
||||
.send()
|
||||
.await?
|
||||
.error_for_status()?
|
||||
.bytes()
|
||||
.await?
|
||||
.to_vec())
|
||||
}
|
||||
|
||||
pub async fn upload_file(&self, path: &std::path::Path) -> Result<serde_json::Value> {
|
||||
let filename = path
|
||||
.file_name()
|
||||
.context("Invalid path: no filename")?
|
||||
.to_string_lossy()
|
||||
.to_string();
|
||||
let data = tokio::fs::read(path).await?;
|
||||
let part = reqwest::multipart::Part::bytes(data).file_name(filename);
|
||||
let form = reqwest::multipart::Form::new().part("file", part);
|
||||
Ok(self
|
||||
.client
|
||||
.post(format!("{}/files", self.base_url))
|
||||
.bearer_auth(&self.token)
|
||||
.multipart(form)
|
||||
.send()
|
||||
.await?
|
||||
.error_for_status()?
|
||||
.json::<serde_json::Value>()
|
||||
.await?)
|
||||
}
|
||||
|
||||
pub async fn delete_files(&self, req: &BatchFilesRequest) -> Result<serde_json::Value> {
|
||||
Ok(self
|
||||
.client
|
||||
.delete(format!("{}/admin/files", self.base_url))
|
||||
.bearer_auth(&self.token)
|
||||
.json(req)
|
||||
.send()
|
||||
.await?
|
||||
.error_for_status()?
|
||||
.json::<serde_json::Value>()
|
||||
.await?)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user