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}