codecs/decoding/format/
native.rs1use bytes::Bytes;
2use prost::Message;
3use serde::{Deserialize, Serialize};
4use smallvec::{SmallVec, smallvec};
5use vector_core::{
6 config::{DataType, LogNamespace},
7 event::{Event, EventArray, EventContainer, proto},
8 schema,
9};
10use vrl::value::Kind;
11
12use super::Deserializer;
13
14#[derive(Debug, Clone, Default, Deserialize, Serialize)]
16pub struct NativeDeserializerConfig;
17
18impl NativeDeserializerConfig {
19 pub fn build(&self) -> NativeDeserializer {
21 NativeDeserializer
22 }
23
24 pub fn output_type(&self) -> DataType {
26 DataType::all_bits()
27 }
28
29 pub fn schema_definition(&self, log_namespace: LogNamespace) -> schema::Definition {
31 match log_namespace {
32 LogNamespace::Legacy => schema::Definition::empty_legacy_namespace(),
33 LogNamespace::Vector => {
34 schema::Definition::new_with_default_metadata(Kind::any(), [log_namespace])
35 }
36 }
37 }
38}
39
40#[derive(Debug, Clone, Default)]
42pub struct NativeDeserializer;
43
44impl Deserializer for NativeDeserializer {
45 fn parse(
46 &self,
47 bytes: Bytes,
48 _log_namespace: LogNamespace,
51 ) -> vector_common::Result<SmallVec<[Event; 1]>> {
52 if bytes.is_empty() {
53 Ok(smallvec![])
54 } else {
55 let event_array = EventArray::from(proto::EventArray::decode(bytes)?);
56 Ok(event_array.into_events().collect())
57 }
58 }
59}