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}