1use crate::borrow_streamer::{BorrowStreamer, BorrowStreamerMut};
8use crate::{Advice, ReadAt};
9use io_lifetimes::AsFilelike;
10use std::fs::File;
11use std::io::{self, copy, Read};
12use system_interface::fs::FileIoExt;
13
14#[inline]
16pub fn advise<'f, Filelike: AsFilelike>(
17 filelike: &Filelike,
18 offset: u64,
19 len: u64,
20 advice: Advice,
21) -> io::Result<()> {
22 <File as FileIoExt>::advise(&filelike.as_filelike_view::<File>(), offset, len, advice)
23}
24
25#[inline]
27pub fn copy_from<'f, Filelike: AsFilelike, R: ReadAt>(
28 filelike: &Filelike,
29 offset: u64,
30 input: &R,
31 input_offset: u64,
32 len: u64,
33) -> io::Result<u64> {
34 let input_view = filelike.as_filelike_view::<File>();
35 let mut input_tmp = &*input_view;
36 let mut output_streamer = BorrowStreamerMut::new(&mut input_tmp, offset);
37 let input_streamer = BorrowStreamer::new(input, input_offset);
38 copy(&mut input_streamer.take(len), &mut output_streamer)
39}
40
41#[inline]
43pub fn set_len<'f, Filelike: AsFilelike>(filelike: &Filelike, size: u64) -> io::Result<()> {
44 filelike.as_filelike_view::<File>().set_len(size)
45}