codecs/decoding/format/
mod.rs

1//! A collection of formats that can be used to convert from byte frames to
2//! structured events.
3
4#![deny(missing_docs)]
5
6mod avro;
7mod bytes;
8mod gelf;
9mod influxdb;
10mod json;
11mod native;
12mod native_json;
13#[cfg(feature = "opentelemetry")]
14mod otlp;
15mod protobuf;
16#[cfg(feature = "syslog")]
17mod syslog;
18mod vrl;
19
20use ::bytes::Bytes;
21pub use avro::{AvroDeserializer, AvroDeserializerConfig, AvroDeserializerOptions};
22use dyn_clone::DynClone;
23pub use gelf::{GelfDeserializer, GelfDeserializerConfig, GelfDeserializerOptions};
24pub use influxdb::{InfluxdbDeserializer, InfluxdbDeserializerConfig};
25pub use json::{JsonDeserializer, JsonDeserializerConfig, JsonDeserializerOptions};
26pub use native::{NativeDeserializer, NativeDeserializerConfig};
27pub use native_json::{
28    NativeJsonDeserializer, NativeJsonDeserializerConfig, NativeJsonDeserializerOptions,
29};
30#[cfg(feature = "opentelemetry")]
31pub use otlp::{OtlpDeserializer, OtlpDeserializerConfig, OtlpSignalType};
32pub use protobuf::{ProtobufDeserializer, ProtobufDeserializerConfig, ProtobufDeserializerOptions};
33use smallvec::SmallVec;
34#[cfg(feature = "syslog")]
35pub use syslog::{SyslogDeserializer, SyslogDeserializerConfig, SyslogDeserializerOptions};
36use vector_core::{config::LogNamespace, event::Event};
37
38pub use self::{
39    bytes::{BytesDeserializer, BytesDeserializerConfig},
40    vrl::{VrlDeserializer, VrlDeserializerConfig, VrlDeserializerOptions},
41};
42
43/// Parse structured events from bytes.
44pub trait Deserializer: DynClone + Send + Sync {
45    /// Parses structured events from bytes.
46    ///
47    /// It returns a `SmallVec` rather than an `Event` directly, since one byte
48    /// frame can potentially hold multiple events, e.g. when parsing a JSON
49    /// array. However, we optimize the most common case of emitting one event
50    /// by not requiring heap allocations for it.
51    ///
52    /// **Note**: The type of the produced events depends on the implementation.
53    fn parse(
54        &self,
55        bytes: Bytes,
56        log_namespace: LogNamespace,
57    ) -> vector_common::Result<SmallVec<[Event; 1]>>;
58}
59
60dyn_clone::clone_trait_object!(Deserializer);
61
62/// A `Box` containing a `Deserializer`.
63pub type BoxedDeserializer = Box<dyn Deserializer>;
64
65/// Default value for the UTF-8 lossy option.
66const fn default_lossy() -> bool {
67    true
68}