23 lines
540 B
Rust
23 lines
540 B
Rust
use std::sync::Arc;
|
|
|
|
use axum::{Json, extract::State, http::StatusCode};
|
|
|
|
use crate::tts::TtsPool;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct Body {
|
|
text: String,
|
|
lang: String,
|
|
style_id: String,
|
|
}
|
|
|
|
pub async fn handler(
|
|
State(state): State<Arc<TtsPool>>,
|
|
Json(payload): Json<Body>,
|
|
) -> Result<Vec<u8>, (StatusCode, String)> {
|
|
Ok(state
|
|
.synthesize(payload.text, payload.lang, payload.style_id)
|
|
.await
|
|
.map_err(|err| (StatusCode::BAD_REQUEST, err))?)
|
|
}
|