tsfile_writer/writer/encoding/
plain.rs

1use std::io::Write;
2
3use crate::writer::encoding::Encoder;
4use crate::writer::{utils, IoTDBValue};
5use crate::writer::{TSDataType, TsFileError};
6
7pub struct PlainEncoder {
8    data_type: TSDataType,
9    pub(crate) buffer: Vec<u8>,
10}
11
12impl PlainEncoder {
13    pub(crate) fn new(data_type: TSDataType) -> PlainEncoder {
14        Self {
15            data_type,
16            buffer: Vec::new(),
17        }
18    }
19}
20
21impl Encoder for PlainEncoder {
22    fn write(&mut self, value: &IoTDBValue) -> Result<(), TsFileError> {
23        match value {
24            IoTDBValue::DOUBLE(v) => {
25                self.buffer.write_all(&v.to_be_bytes())?;
26            }
27            IoTDBValue::FLOAT(v) => {
28                self.buffer.write_all(&v.to_be_bytes())?;
29            }
30            IoTDBValue::INT(v) => {
31                utils::write_var_i32(*v, &mut self.buffer)?;
32            }
33            IoTDBValue::LONG(v) => {
34                self.buffer.write_all(&v.to_be_bytes())?;
35            }
36        };
37        Ok(())
38    }
39
40    fn size(&mut self) -> u32 {
41        self.buffer.len() as u32
42    }
43
44    fn get_max_byte_size(&self) -> u32 {
45        match self.data_type {
46            TSDataType::INT32 => (24 + self.buffer.len()) as u32,
47            TSDataType::INT64 => 0,
48            TSDataType::FLOAT => 0,
49        }
50    }
51    fn serialize(&mut self, buffer: &mut Vec<u8>) {
52        buffer.write(&self.buffer);
53    }
54
55    fn reset(&mut self) {
56        self.buffer.clear();
57    }
58}