puffin/file_format/reader.rs
1// Copyright 2023 Greptime Team
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15mod file;
16mod footer;
17
18use async_trait::async_trait;
19use common_base::range_read::RangeReader;
20
21use crate::blob_metadata::BlobMetadata;
22use crate::error::Result;
23pub use crate::file_format::reader::file::PuffinFileReader;
24pub use crate::file_format::reader::footer::PuffinFileFooterReader;
25use crate::file_metadata::FileMetadata;
26
27/// `AsyncReader` defines an asynchronous reader for puffin data.
28#[async_trait]
29pub trait AsyncReader<'a> {
30 type Reader: RangeReader;
31
32 /// Fetches the FileMetadata.
33 async fn metadata(&'a mut self) -> Result<FileMetadata>;
34
35 /// Reads particular blob data based on given metadata.
36 ///
37 /// Data read from the reader is compressed leaving the caller to decompress the data.
38 fn blob_reader(&'a mut self, blob_metadata: &BlobMetadata) -> Result<Self::Reader>;
39}