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