vector/sinks/honeycomb/
service.rs1use bytes::Bytes;
4use http::{Request, Uri};
5use vector_lib::sensitive_string::SensitiveString;
6
7use crate::sinks::{
8 util::buffer::compression::Compression,
9 util::http::{HttpRequest, HttpServiceRequestBuilder},
10 HTTPRequestBuilderSnafu,
11};
12use snafu::ResultExt;
13
14use super::config::HTTP_HEADER_HONEYCOMB;
15
16#[derive(Debug, Clone)]
17pub(super) struct HoneycombSvcRequestBuilder {
18 pub(super) uri: Uri,
19 pub(super) api_key: SensitiveString,
20 pub(super) compression: Compression,
21}
22
23impl HttpServiceRequestBuilder<()> for HoneycombSvcRequestBuilder {
24 fn build(&self, mut request: HttpRequest<()>) -> Result<Request<Bytes>, crate::Error> {
25 let mut builder =
26 Request::post(&self.uri).header(HTTP_HEADER_HONEYCOMB, self.api_key.inner());
27
28 if let Some(ce) = self.compression.content_encoding() {
29 builder = builder.header("Content-Encoding".to_string(), ce.to_string());
30 }
31
32 builder
33 .body(request.take_payload())
34 .context(HTTPRequestBuilderSnafu)
35 .map_err(Into::into)
36 }
37}