diff --git a/src/main.rs b/src/main.rs
index 4222e29..db5a406 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -142,7 +142,8 @@ pub async fn handle(
debug_request(req)
},
_ => {
- let _droppable_transaction = newrelic_logger.web_transaction("unmatched endpoint");
+ let _droppable_transaction = newrelic_logger
+ .web_transaction("unmatched endpoint");
let forward = router.get_random_host();
info!("Forwarding to `{}` random host: {}", &forward, req.uri());
diff --git a/src/speak_proxy.rs b/src/speak_proxy.rs
index ccd4217..52b5132 100644
--- a/src/speak_proxy.rs
+++ b/src/speak_proxy.rs
@@ -17,6 +17,7 @@ use std::net::{SocketAddr, IpAddr};
use std::str::FromStr;
use std::sync::Arc;
use std::convert::Infallible;
+use hyper_reverse_proxy::ProxyError;
/// NB: This much match the shape of SpeakRequest in the 'voder/tts_service' code.
/// This is used for both /speak and /speak_spectrogram requests.
@@ -58,12 +59,12 @@ struct RequestDetails {
.boxed()
}*/
-/*pub fn speak_proxy(
- req: Request
,
+pub async fn speak_proxy(
remote_addr: SocketAddr,
+ req: Request>,
router: Arc,
transaction: MaybeNewRelicTransaction,
- endpoint: &'static str) -> BoxFut
+ endpoint: &'static str) -> Box, ProxyError>>>
{
let mut headers = req.headers().clone();
@@ -88,37 +89,40 @@ struct RequestDetails {
headers.insert(HeaderName::from_static("x-voder-proxy-for"), upstream_client_ip.clone());
headers.insert(HeaderName::from_static("x-gateway-ip"), gateway_ip);
- Box::new(req.into_body().concat2().map(move |b| { // Builds a BoxedFut to return
- let request_bytes = b.as_ref();
+ let request_bytes = req.body();
- let request = serde_json::from_slice::(request_bytes)
- .unwrap();
+ 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 proxy_host = router.get_speaker_host(&request_details.speaker);
+ let request_details = RequestDetails {
+ request_bytes: request_bytes.clone(),
+ speaker: request.speaker,
+ };
- info!("Routing {} for {} to {}", endpoint, &request_details.speaker, &proxy_host);
+ let proxy_host = router.get_speaker_host(&request_details.speaker);
- transaction.add_attribute("speaker", &request_details.speaker);
+ info!("Routing {} for {} to {}", endpoint, &request_details.speaker, &proxy_host);
- let mut request_builder = Request::builder();
- request_builder.method(Method::POST)
- .uri(endpoint);
+ transaction.add_attribute("speaker", &request_details.speaker);
- for (k, v) in headers.iter() {
- request_builder.header(k, v);
- }
+ let mut request_builder = Request::builder()
+ .method(Method::POST)
+ .uri(endpoint);
- let new_req = request_builder
- .body(Body::from(request_details.request_bytes))
- .unwrap();
+ for (k, v) in headers.iter() {
+ // NB: Handling move because of builder class
+ request_builder = request_builder.header(k, v);
+ }
- hyper_reverse_proxy::call(remote_addr.ip(), &proxy_host, new_req)
- }))
-}*/
+ let new_req = request_builder
+ .body(Body::from(request_details.request_bytes))
+ .unwrap();
+
+ //Box::new(future::ok(Vec::new()))
+ match hyper_reverse_proxy::call(remote_addr.ip(), &proxy_host, new_req).await {
+ Ok(result) => Box::new(future::ok(result)),
+ Err(result) => Box::new(future::err(result)),
+ }
+}