use std::borrow::Cow;
use std::collections::HashMap;
use serde::Deserialize;
#[cfg(test)]
mod tests;
mod format;
pub mod job;
pub mod task;
pub mod webhook;
pub use format::Format;
use task::Task;
pub use hapic::Error;
hapic::json_api!(
pub struct Client<B, T: Transport<B>>;
pub trait ApiCall;
json {
<'a> "/jobs": job::Create<'a> as job::CreateJobRequest<'a> => job::JobsOutput as job::Job;
<'a> "/jobs": ImportConvertExport<'a> as job::CreateJobRequest<'a> => job::JobsOutput as job::Job;
}
);
pub type HyperClient = Client<hyper::Body, hapic::transport::HttpsTransport>;
impl HyperClient {
pub fn default_client(bearer_token: &str) -> HyperClient {
let mut client = Client::new(Cow::Borrowed("https://api.cloudconvert.com/v2"));
client.client.authorization =
Some(("Bearer ".to_string() + bearer_token).try_into().unwrap());
client
}
}
#[derive(Debug, Deserialize)]
pub enum Status {
#[serde(rename = "waiting")]
Waiting,
#[serde(rename = "processing")]
Processing,
#[serde(rename = "finished")]
Finished,
#[serde(rename = "error")]
Error,
}
#[derive(Debug)]
pub struct ImportConvertExport<'a> {
pub tag: Option<Cow<'a, str>>,
pub import: task::ImportUrl<'a>,
pub input_format: Format,
pub output_format: Format,
pub export_inline: bool,
pub timeout: Option<u32>,
pub webhook_url: Option<Cow<'a, str>>,
}
impl<'a> From<ImportConvertExport<'a>> for job::Create<'a> {
fn from(options: ImportConvertExport<'a>) -> job::Create<'a> {
options.create_job()
}
}
impl<'a> From<ImportConvertExport<'a>> for job::CreateJobRequest<'a> {
fn from(options: ImportConvertExport<'a>) -> job::CreateJobRequest<'a> {
options.create_job().into()
}
}
impl<'a> ImportConvertExport<'a> {
pub fn create_job(self) -> job::Create<'a> {
let import_id = "import";
let convert_id = "convert";
let export_id = "export";
job::Create {
tasks: HashMap::from([
(import_id.to_string(), self.import.into()),
(
convert_id.to_string(),
task::Convert {
input: import_id.into(),
input_format: Some(self.input_format),
output_format: self.output_format,
filename: None,
engine: None,
engine_version: None,
timeout: self.timeout,
}
.into(),
),
(
export_id.to_string(),
task::ExportUrl {
input: convert_id.into(),
inline: self.export_inline,
archive_multiple_files: false,
}
.into(),
),
] as [(String, Task); 3]),
tag: self.tag,
webhook_url: self.webhook_url,
}
}
}