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