avro_schema/
file.rs

1//! Contains structs found in Avro files
2use crate::schema::Record;
3
4/// Avro file's Metadata
5#[derive(Debug, Clone, PartialEq, Hash)]
6pub struct FileMetadata {
7    /// The Record represented in the file's Schema
8    pub record: Record,
9    /// The files' compression
10    pub compression: Option<Compression>,
11    /// The files' marker, present in every block
12    pub marker: [u8; 16],
13}
14
15/// A compressed Avro block.
16#[derive(Debug, Clone, Default, PartialEq, Eq)]
17pub struct CompressedBlock {
18    /// The number of rows
19    pub number_of_rows: usize,
20    /// The compressed data
21    pub data: Vec<u8>,
22}
23
24impl CompressedBlock {
25    /// Creates a new CompressedBlock
26    pub fn new(number_of_rows: usize, data: Vec<u8>) -> Self {
27        Self {
28            number_of_rows,
29            data,
30        }
31    }
32}
33
34/// An uncompressed Avro block.
35#[derive(Debug, Clone, Default, PartialEq, Eq)]
36pub struct Block {
37    /// The number of rows
38    pub number_of_rows: usize,
39    /// The uncompressed data
40    pub data: Vec<u8>,
41}
42
43impl Block {
44    /// Creates a new Block
45    pub fn new(number_of_rows: usize, data: Vec<u8>) -> Self {
46        Self {
47            number_of_rows,
48            data,
49        }
50    }
51}
52
53/// Valid compressions
54#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
55pub enum Compression {
56    /// Deflate
57    Deflate,
58    /// Snappy
59    Snappy,
60}