1 #![allow(unreachable_pub)] 2 //! Mock version of `std::fs::OpenOptions`; 3 use mockall::mock; 4 5 use crate::fs::mocks::MockFile; 6 #[cfg(unix)] 7 use std::os::unix::fs::OpenOptionsExt; 8 #[cfg(windows)] 9 use std::os::windows::fs::OpenOptionsExt; 10 use std::{io, path::Path}; 11 12 mock! { 13 #[derive(Debug)] 14 pub OpenOptions { 15 pub fn append(&mut self, append: bool) -> &mut Self; 16 pub fn create(&mut self, create: bool) -> &mut Self; 17 pub fn create_new(&mut self, create_new: bool) -> &mut Self; 18 pub fn open<P: AsRef<Path> + 'static>(&self, path: P) -> io::Result<MockFile>; 19 pub fn read(&mut self, read: bool) -> &mut Self; 20 pub fn truncate(&mut self, truncate: bool) -> &mut Self; 21 pub fn write(&mut self, write: bool) -> &mut Self; 22 } 23 impl Clone for OpenOptions { 24 fn clone(&self) -> Self; 25 } 26 #[cfg(unix)] 27 impl OpenOptionsExt for OpenOptions { 28 fn custom_flags(&mut self, flags: i32) -> &mut Self; 29 fn mode(&mut self, mode: u32) -> &mut Self; 30 } 31 #[cfg(windows)] 32 impl OpenOptionsExt for OpenOptions { 33 fn access_mode(&mut self, access: u32) -> &mut Self; 34 fn share_mode(&mut self, val: u32) -> &mut Self; 35 fn custom_flags(&mut self, flags: u32) -> &mut Self; 36 fn attributes(&mut self, val: u32) -> &mut Self; 37 fn security_qos_flags(&mut self, flags: u32) -> &mut Self; 38 } 39 } 40