parquet_lru/
lib.rs

1mod r#dyn;
2#[cfg(feature = "foyer")]
3pub mod foyer;
4
5use std::{future::Future, marker::PhantomData};
6
7use parquet::arrow::async_reader::AsyncFileReader;
8
9pub use crate::r#dyn::*;
10
11pub trait LruCache<K>
12where
13    K: 'static,
14{
15    type LruReader<R>: AsyncFileReader + 'static
16    where
17        R: AsyncFileReader + 'static;
18
19    fn get_reader<R>(&self, key: K, reader: R) -> impl Future<Output = Self::LruReader<R>> + Send
20    where
21        R: AsyncFileReader + 'static;
22}
23
24#[derive(Default)]
25pub struct NoCache<K> {
26    _phantom: PhantomData<K>,
27}
28
29impl<K> Clone for NoCache<K> {
30    fn clone(&self) -> Self {
31        Self {
32            _phantom: PhantomData,
33        }
34    }
35}
36
37unsafe impl<K> Send for NoCache<K> {}
38
39unsafe impl<K> Sync for NoCache<K> {}
40
41impl<K> LruCache<K> for NoCache<K>
42where
43    K: 'static,
44{
45    type LruReader<R>
46        = R
47    where
48        R: AsyncFileReader + 'static;
49
50    #[allow(clippy::manual_async_fn)]
51    fn get_reader<R>(&self, _key: K, reader: R) -> impl Future<Output = R> + Send
52    where
53        R: AsyncFileReader,
54    {
55        async move { reader }
56    }
57}