Add core.rs API client
This commit is contained in:
60
src/api/core.rs
Normal file
60
src/api/core.rs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//! momentry_core API 客戶端
|
||||||
|
|
||||||
|
use anyhow::Result;
|
||||||
|
use reqwest::Client;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub struct VideoInfo {
|
||||||
|
pub uuid: String,
|
||||||
|
pub filename: String,
|
||||||
|
pub duration_ms: u64,
|
||||||
|
pub status: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
pub struct SearchResult {
|
||||||
|
pub uuid: String,
|
||||||
|
pub filename: String,
|
||||||
|
pub timestamp_ms: u64,
|
||||||
|
pub score: f32,
|
||||||
|
pub text: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct CoreClient {
|
||||||
|
client: Client,
|
||||||
|
base_url: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl CoreClient {
|
||||||
|
pub fn new(base_url: &str) -> Self {
|
||||||
|
Self {
|
||||||
|
client: Client::new(),
|
||||||
|
base_url: base_url.to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn list_videos(&self) -> Result<Vec<VideoInfo>> {
|
||||||
|
let url = format!("{}/api/v1/videos", self.base_url);
|
||||||
|
let response = self.client.get(&url).send().await?;
|
||||||
|
let videos: Vec<VideoInfo> = response.json().await?;
|
||||||
|
Ok(videos)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn search(&self, query: &str) -> Result<Vec<SearchResult>> {
|
||||||
|
let url = format!("{}/api/v1/search", self.base_url);
|
||||||
|
let response = self.client
|
||||||
|
.post(&url)
|
||||||
|
.json(&serde_json::json!({ "query": query }))
|
||||||
|
.send().await?;
|
||||||
|
let results: Vec<SearchResult> = response.json().await?;
|
||||||
|
Ok(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn get_video(&self, uuid: &str) -> Result<VideoInfo> {
|
||||||
|
let url = format!("{}/api/v1/lookup?uuid={}", self.base_url, uuid);
|
||||||
|
let response = self.client.get(&url).send().await?;
|
||||||
|
let video: VideoInfo = response.json().await?;
|
||||||
|
Ok(video)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user