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}