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