use std::collections::HashMap;
use std::fmt::Debug;
use reqwest::Method;
use serde::{self, Deserialize, Serialize};
use crate::ucare::{encode_json, rest::Client, Result};
pub struct Service<'a> {
client: &'a Client,
}
pub fn new_svc(client: &Client) -> Service {
Service { client }
}
impl Service<'_> {
pub fn document(&self, params: JobParams) -> Result<JobResult> {
let json = encode_json(¶ms)?;
self.client.call::<String, Vec<u8>, JobResult>(
Method::POST,
format!("/convert/document/"),
None,
Some(json),
)
}
pub fn document_status(&self, token: i32) -> Result<StatusResult> {
self.client.call::<String, String, StatusResult>(
Method::GET,
format!("/convert/document/status/{}/", token),
None,
None,
)
}
pub fn video(&self, params: JobParams) -> Result<JobResult> {
let json = encode_json(¶ms)?;
self.client.call::<String, Vec<u8>, JobResult>(
Method::POST,
format!("/convert/video"),
None,
Some(json),
)
}
pub fn video_status(&self, token: i32) -> Result<StatusResult> {
self.client.call::<String, String, StatusResult>(
Method::POST,
format!("convert/video/status/{}/", token),
None,
None,
)
}
}
#[derive(Debug, Serialize)]
pub struct JobParams {
pub paths: Vec<String>,
pub store: Option<ToStore>,
}
#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize)]
pub enum ToStore {
#[serde(rename = "true")]
True,
#[serde(rename = "false")]
False,
}
#[derive(Debug, Deserialize)]
pub struct JobResult {
pub problems: Option<HashMap<String, String>>,
pub result: Option<Vec<JobInfo>>,
}
#[derive(Debug, Deserialize)]
pub struct JobInfo {
pub uuid: String,
pub thumbnails_group_id: Option<String>,
pub original_source: Option<String>,
pub token: Option<i32>,
}
#[derive(Debug, Deserialize)]
pub struct StatusResult {
pub status: String,
pub error: Option<String>,
pub result: JobInfo,
}