use crate::AtomicWriteFile;
use crate::OpenOptions;
use crate::imp::Preserve;
use nix::sys::stat::mode_t;
use std::io::Result;
use std::os::unix::fs;
#[cfg(feature = "unstable-unix_file_vectored_at")]
use std::io::IoSlice;
#[cfg(feature = "unstable-unix_file_vectored_at")]
use std::io::IoSliceMut;
impl fs::OpenOptionsExt for OpenOptions {
#[inline]
fn mode(&mut self, mode: u32) -> &mut Self {
self.inner.mode = mode as mode_t;
self
}
#[inline]
fn custom_flags(&mut self, flags: i32) -> &mut Self {
self.inner.custom_flags = flags;
self
}
}
pub trait OpenOptionsExt {
fn preserve_mode(&mut self, preserve_mode: bool) -> &mut Self;
fn preserve_owner(&mut self, preserve_owner: bool) -> &mut Self;
fn try_preserve_owner(&mut self, try_preserve_owner: bool) -> &mut Self;
}
impl OpenOptionsExt for OpenOptions {
#[inline]
fn preserve_mode(&mut self, preserve_mode: bool) -> &mut Self {
self.inner.preserve_mode = preserve_mode;
self
}
#[inline]
fn preserve_owner(&mut self, preserve_owner: bool) -> &mut Self {
self.inner.preserve_owner = match preserve_owner {
true => Preserve::Yes,
false => Preserve::No,
};
self
}
#[inline]
fn try_preserve_owner(&mut self, try_preserve_owner: bool) -> &mut Self {
self.inner.preserve_owner = match try_preserve_owner {
true => Preserve::Try,
false => Preserve::No,
};
self
}
}
impl fs::FileExt for AtomicWriteFile {
#[inline]
fn read_at(&self, buf: &mut [u8], offset: u64) -> Result<usize> {
self.temporary_file.file.read_at(buf, offset)
}
#[inline]
fn write_at(&self, buf: &[u8], offset: u64) -> Result<usize> {
self.temporary_file.file.write_at(buf, offset)
}
#[inline]
#[cfg(feature = "unstable-unix_file_vectored_at")]
fn read_vectored_at(&self, bufs: &mut [IoSliceMut<'_>], offset: u64) -> Result<usize> {
self.temporary_file.file.read_vectored_at(bufs, offset)
}
#[inline]
fn read_exact_at(&self, buf: &mut [u8], offset: u64) -> Result<()> {
self.temporary_file.file.read_exact_at(buf, offset)
}
#[inline]
#[cfg(feature = "unstable-unix_file_vectored_at")]
fn write_vectored_at(&self, bufs: &[IoSlice<'_>], offset: u64) -> Result<usize> {
self.temporary_file.file.write_vectored_at(bufs, offset)
}
#[inline]
fn write_all_at(&self, buf: &[u8], offset: u64) -> Result<()> {
self.temporary_file.file.write_all_at(buf, offset)
}
}