1 use std::path::Path; 2 3 use tokio::fs::File; 4 use tokio::io::{AsyncBufReadExt, BufReader}; 5 fill_buf_file(path: &Path) -> Vec<u8>6pub async fn fill_buf_file(path: &Path) -> Vec<u8> { 7 let file = File::open(path).await.unwrap(); 8 let mut file = BufReader::new(file); 9 10 let mut contents = Vec::new(); 11 12 loop { 13 let consumed = { 14 let buffer = file.fill_buf().await.unwrap(); 15 if buffer.is_empty() { 16 break; 17 } 18 contents.extend_from_slice(buffer); 19 buffer.len() 20 }; 21 22 file.consume(consumed); 23 } 24 25 contents 26 } 27 28 #[cfg(test)] 29 mod test { 30 use super::*; 31 32 use tempfile::NamedTempFile; 33 use tokio_test::assert_ok; 34 35 #[tokio::test] test_fill_buf_file()36 async fn test_fill_buf_file() { 37 let file = NamedTempFile::new().unwrap(); 38 assert_ok!(std::fs::write(file.path(), b"hello")); 39 40 let contents = fill_buf_file(file.path()).await; 41 42 assert_eq!(contents, b"hello"); 43 } 44 } 45