fakeyou-api 0.3.0

A very simple Rust library for FakeYou API.
Documentation
use crate::tts::*;
use crate::*;

pub trait TtsApiSync {
    fn create_tts_task(&self, inference_body: &InferenceBody) -> ApiResult<TtsOutputResult>;
}

impl TtsApiSync for FakeYou {
    fn create_tts_task(&self, inference_body: &InferenceBody) -> ApiResult<TtsOutputResult> {
        let inference_result = self.tts_inference(inference_body)?;

        loop {
            let job_result = self.tts_job(&inference_result.inference_job_token);

            let status = match job_result {
                Ok(job_result) => match job_result.state.status {
                    TtsJobStatus::Pending => None,
                    TtsJobStatus::Started => None,
                    TtsJobStatus::AttemptFailed => None,
                    TtsJobStatus::CompleteSuccess => {
                        match job_result.state.maybe_public_bucket_wav_audio_path {
                            None => unreachable!(),
                            Some(public_bucket_wav_audio_path) => {
                                Some(self.tts_output(&public_bucket_wav_audio_path))
                            }
                        }
                    }
                    _ => Some(Err(Error::JobFailed(
                        job_result
                            .state
                            .maybe_extra_status_description
                            .unwrap_or("TTS job failed".to_string()),
                    ))),
                },
                Err(e) => Some(Err(e)),
            };

            match status {
                None => std::thread::sleep(std::time::Duration::from_secs(2)),
                Some(result) => return result,
            }
        }
    }
}