vector/sinks/honeycomb/
service.rs

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