vector/sinks/honeycomb/
service.rs

1//! Service implementation for the `honeycomb` sink.
2
3use 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}