fast_pull/core/
mock.rs

1extern crate alloc;
2use crate::{ProgressEntry, RandPuller, SeqPuller};
3use alloc::{sync::Arc, vec::Vec};
4use bytes::Bytes;
5use futures::{TryStream, stream};
6
7pub fn build_mock_data(size: usize) -> Vec<u8> {
8    (0..size).map(|i| (i % 256) as u8).collect()
9}
10
11#[derive(Clone)]
12pub struct MockPuller(pub Arc<[u8]>);
13impl MockPuller {
14    pub fn new(data: &[u8]) -> Self {
15        Self(Arc::from(data))
16    }
17}
18impl RandPuller for MockPuller {
19    type Error = ();
20    fn pull(
21        &mut self,
22        range: &ProgressEntry,
23    ) -> impl TryStream<Ok = Bytes, Error = Self::Error> + Send + Unpin {
24        let data = &self.0[range.start as usize..range.end as usize];
25        stream::iter(data.iter().map(|e| Ok(Bytes::from_iter([*e]))))
26    }
27}
28impl SeqPuller for MockPuller {
29    type Error = ();
30    fn pull(&mut self) -> impl TryStream<Ok = Bytes, Error = Self::Error> + Send + Unpin {
31        stream::iter(self.0.iter().map(|e| Ok(Bytes::from_iter([*e]))))
32    }
33}