xref: /aosp_15_r20/external/bazelbuild-rules_rust/examples/crate_universe/cargo_local/src/lib.rs (revision d4726bddaa87cc4778e7472feed243fa4b6c267f)
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>6 pub 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