1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::buckets::readers::generic_binary_reader::{ChunkDecoder, GenericChunkedBinaryReader};
use crate::buckets::writers::lock_free_binary_writer::LOCK_FREE_BUCKET_MAGIC;
use crate::memory_fs::file::reader::FileReader;
use std::io::{Read, Take};

pub struct LockFreeStreamDecoder;

impl ChunkDecoder for LockFreeStreamDecoder {
    const MAGIC_HEADER: &'static [u8; 16] = LOCK_FREE_BUCKET_MAGIC;
    type ReaderType = Take<FileReader>;

    fn decode_stream(reader: FileReader, size: u64) -> Self::ReaderType {
        reader.take(size)
    }

    fn dispose_stream(stream: Self::ReaderType) -> FileReader {
        stream.into_inner()
    }
}

pub type LockFreeBinaryReader = GenericChunkedBinaryReader<LockFreeStreamDecoder>;