fast_pull/core/
mock.rs

1extern crate alloc;
2use crate::{ProgressEntry, PullResult, PullStream, RandPuller, SeqPuller};
3use alloc::{sync::Arc, vec::Vec};
4use bytes::Bytes;
5use futures::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    async fn pull(
21        &mut self,
22        range: &ProgressEntry,
23    ) -> PullResult<Self::Error, impl PullStream<Self::Error>> {
24        let data = &self.0[range.start as usize..range.end as usize];
25        Ok(stream::iter(
26            data.iter().map(|e| Ok(Bytes::from_iter([*e]))),
27        ))
28    }
29}
30impl SeqPuller for MockPuller {
31    type Error = ();
32    async fn pull(&mut self) -> PullResult<Self::Error, impl PullStream<Self::Error>> {
33        Ok(stream::iter(
34            self.0.iter().map(|e| Ok(Bytes::from_iter([*e]))),
35        ))
36    }
37}