From 74ba214b7dec532be7df9c34e0a0379982c13471 Mon Sep 17 00:00:00 2001 From: Kirill Khalitov Date: Fri, 30 Jun 2023 15:06:17 +0200 Subject: [PATCH] [rev.ai] Local file job submission method --- rev.ai/src/jobs.rs | 32 ++++++++++++++++++++++++++++++++ rev.ai/src/types.rs | 17 +++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/rev.ai/src/jobs.rs b/rev.ai/src/jobs.rs index 4aa0cb59..e3206b96 100644 --- a/rev.ai/src/jobs.rs +++ b/rev.ai/src/jobs.rs @@ -76,6 +76,38 @@ impl Jobs { ) .await } + /** + * Submit Local File Transcription Job. + * + * This function performs a `POST` to the `/jobs` endpoint. + * + * Starts an asynchronous job to transcribe speech-to-text for a media file. Media files can be specified by uploading a local file as part of a multipart/form request. + */ + pub async fn submit_local_file_transcription_job( + &self, + crate::types::SubmitLocalFileJob { + blob, + mime_type, + filename, + }: &crate::types::SubmitLocalFileJob, + options: Option<&crate::types::SubmitJobLocalFileOptionsAllOf>, + ) -> ClientResult> { + let url = self.client.url("/jobs", None); + + let mut form = reqwest::multipart::Form::new().part( + "media", + reqwest::multipart::Part::bytes(blob.to_vec()) + .mime_str(&mime_type)? + .file_name(filename.clone()), + ); + + if let Some(options) = options { + form = form.text("options", serde_json::to_string(&options)?); + } + + self.client.post_form(&url, form).await + } + /** * Submit Transcription Job. * diff --git a/rev.ai/src/types.rs b/rev.ai/src/types.rs index 8f34b3bd..b4a854e4 100644 --- a/rev.ai/src/types.rs +++ b/rev.ai/src/types.rs @@ -586,6 +586,23 @@ pub struct SubmitJobMediaUrlOptionsAllOf { pub submit_job_options_all_of: SubmitJobOptionsAllOf, } +#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)] +pub struct SubmitLocalFileJob { + pub blob: Vec, + pub mime_type: String, + pub filename: String, +} + +/// All of the following types are flattened into one object: +/// +/// - `SubmitJobOptionsAllOf` +/// +#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)] +pub struct SubmitJobLocalFileOptionsAllOf { + #[serde(flatten)] + pub submit_job_options_all_of: SubmitJobOptionsAllOf, +} + /// Rev.ai Job Options Object Model #[derive(Serialize, Default, Deserialize, PartialEq, Debug, Clone, JsonSchema)] pub struct SubmitJobOptions {