diff --git a/dogstatsd/src/datadog.rs b/dogstatsd/src/datadog.rs index 6ee4195ea..0b6865feb 100644 --- a/dogstatsd/src/datadog.rs +++ b/dogstatsd/src/datadog.rs @@ -193,34 +193,27 @@ impl DdApi { .as_ref() .ok_or_else(|| ShippingError::Destination(None, "No client".to_string()))?; let start = std::time::Instant::now(); - let final_body = { - let result = (|| -> Result, Box> { - let mut encoder = - Encoder::new(Vec::new(), 6).map_err(|e| Box::new(e) as Box)?; - - encoder - .write_all(&body) - .map_err(|e| Box::new(e) as Box)?; - - encoder.finish().map_err(|e| Box::new(e) as Box) - })(); - - if let Ok(compressed_data) = result { - compressed_data - } else { - debug!("Failed to compress data, sending uncompressed data"); - body - } - }; - let resp = client + let result = (|| -> std::io::Result> { + let mut encoder = Encoder::new(Vec::new(), 6)?; + encoder.write_all(&body)?; + encoder.finish() + })(); + + let mut builder = client .post(&url) .header("DD-API-KEY", &self.api_key) - .header("Content-Type", content_type) - .header("Content-Encoding", "zstd") - .body(final_body) - .send() - .await; + .header("Content-Type", content_type); + + builder = match result { + Ok(compressed) => builder.header("Content-Encoding", "zstd").body(compressed), + Err(err) => { + debug!("Sending uncompressed data, failed to compress: {err}"); + builder.body(body) + } + }; + + let resp = builder.send().await; let elapsed = start.elapsed(); debug!("Request to {} took {}ms", url, elapsed.as_millis());