diff --git a/src/main.rs b/src/main.rs index 7d69d8b..d8c4a55 100644 --- a/src/main.rs +++ b/src/main.rs @@ -52,6 +52,8 @@ impl ProxyConfigs { } } +/// NB: This much match the shape of SpeakRequest in the 'voder/tts_service' code. +/// This is used for both /speak and /speak_spectrogram requests. #[derive(Serialize, Deserialize, Debug)] pub struct SpeakRequest { /// Slug for the speaker @@ -95,23 +97,26 @@ fn debug_request(req: Request) -> BoxFut { Box::new(future::ok(response)) } +#[derive(Default)] +struct RequestDetails { + pub request_bytes: Vec, + pub speaker: String, +} + fn speak_proxy(req: Request, remote_addr: SocketAddr, endpoint: &'static str) -> BoxFut { let mut headers = req.headers().clone(); - // NB: Rehydrating the request payload can change the content length if whitespace is changed. - headers.remove(HeaderName::from_static("content-length")); Box::new(req.into_body().concat2().map(move |b| { // Builds a BoxedFut to return let request_bytes = b.as_ref(); - let mut request = serde_json::from_slice::(request_bytes) - .unwrap(); - - request.speaker = "glow-ljs-single".to_string(); - - request - }).and_then(move |speak_request: SpeakRequest| { - let request_json = serde_json::to_string(&speak_request) + + let request = serde_json::from_slice::(request_bytes) .unwrap(); + RequestDetails { + request_bytes: request_bytes.to_vec(), + speaker: request.speaker, + } + }).and_then(move |request_details: RequestDetails| { let mut request_builder = Request::builder(); request_builder.method(Method::POST) .uri(endpoint); @@ -121,7 +126,7 @@ fn speak_proxy(req: Request, remote_addr: SocketAddr, endpoint: &'static s } let new_req = request_builder - .body(Body::from(request_json)) + .body(Body::from(request_details.request_bytes)) .unwrap(); hyper_reverse_proxy::call(remote_addr.ip(), "http://127.0.0.1:12345", new_req)