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)
}