use crate::borrow_streamer::{BorrowStreamer, BorrowStreamerMut};
use crate::{Advice, ReadAt};
use io_lifetimes::AsFilelike;
use std::fs::File;
use std::io::{self, copy, Read};
use system_interface::fs::FileIoExt;
#[inline]
pub fn advise<'f, Filelike: AsFilelike>(
filelike: &Filelike,
offset: u64,
len: u64,
advice: Advice,
) -> io::Result<()> {
<File as FileIoExt>::advise(&filelike.as_filelike_view::<File>(), offset, len, advice)
}
#[inline]
pub fn copy_from<'f, Filelike: AsFilelike, R: ReadAt>(
filelike: &Filelike,
offset: u64,
input: &R,
input_offset: u64,
len: u64,
) -> io::Result<u64> {
let input_view = filelike.as_filelike_view::<File>();
let mut input_tmp = &*input_view;
let mut output_streamer = BorrowStreamerMut::new(&mut input_tmp, offset);
let input_streamer = BorrowStreamer::new(input, input_offset);
copy(&mut input_streamer.take(len), &mut output_streamer)
}
#[inline]
pub fn set_len<'f, Filelike: AsFilelike>(filelike: &Filelike, size: u64) -> io::Result<()> {
filelike.as_filelike_view::<File>().set_len(size)
}