1
use anyhow::Result;
2
use bytes::{Bytes, BytesMut};
3
use futures_util::{Stream, StreamExt};
4

            
5
2
pub async fn get_body_max_size(
6
2
    stream: impl Stream<Item = reqwest::Result<Bytes>> + 'static,
7
2
    max_size: usize,
8
2
) -> Result<Bytes> {
9
2
    let mut max = 0;
10
2
    let mut b = BytesMut::new();
11
2
    let mut stream = Box::pin(stream);
12
11
    while let Some(chunk) = stream.as_mut().next().await {
13
10
        let chunk_res = chunk?;
14
10
        let chunk = BytesMut::from(chunk_res.as_ref());
15
10
        let l = chunk.len();
16
10
        max += l;
17
10
        if max > max_size {
18
1
            return Err(anyhow::anyhow!("Max size exceeded"));
19
9
        }
20
9
        b.extend_from_slice(&chunk);
21
    }
22
1
    Ok(b.into())
23
2
}