tsfile_writer/writer/encoding/
plain.rs1use 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}