vortex_layout/segments/
test.rs1use std::sync::Arc;
5
6use futures::FutureExt;
7use parking_lot::Mutex;
8use vortex_buffer::{ByteBuffer, ByteBufferMut};
9use vortex_error::{VortexResult, vortex_err};
10
11use crate::segments::sink::SegmentWriter;
12use crate::segments::{SegmentFuture, SegmentId, SegmentSource};
13
14#[derive(Default, Clone)]
16pub struct TestSegments {
17 segments: Arc<Mutex<Vec<ByteBuffer>>>,
18}
19
20impl SegmentSource for TestSegments {
21 fn request(&self, id: SegmentId, _for_whom: &Arc<str>) -> SegmentFuture {
22 let buffer = self.segments.lock().get(*id as usize).cloned();
23 async move { buffer.ok_or_else(|| vortex_err!("Segment not found")) }.boxed()
24 }
25}
26
27impl SegmentWriter for TestSegments {
28 fn put(&mut self, _segment_id: SegmentId, data: Vec<ByteBuffer>) -> VortexResult<()> {
29 let mut buffer = ByteBufferMut::empty();
31 for segment in data {
32 buffer.extend_from_slice(segment.as_ref());
33 }
34 self.segments.lock().push(buffer.freeze());
35 Ok(())
36 }
37}