standard_lib/fs/file/
create.rs

1use libc::{O_CREAT, O_EXCL, O_TMPFILE, O_TRUNC, c_int};
2
3mod sealed {
4    pub trait Sealed {
5        const FLAGS: libc::c_int;
6    }
7}
8
9use sealed::Sealed;
10
11pub trait OpenMode: Sealed {}
12
13pub trait Permanent: OpenMode {}
14
15pub trait Temporary: OpenMode {}
16
17pub enum NoCreate {}
18impl Sealed for NoCreate {
19    const FLAGS: c_int = 0;
20}
21impl OpenMode for NoCreate {}
22impl Permanent for NoCreate {}
23
24pub enum CreateIfMissing {}
25impl Sealed for CreateIfMissing {
26    const FLAGS: c_int = O_CREAT;
27}
28impl OpenMode for CreateIfMissing {}
29impl Permanent for CreateIfMissing {}
30
31pub enum CreateOrEmpty {}
32impl Sealed for CreateOrEmpty {
33    const FLAGS: c_int = O_CREAT | O_TRUNC;
34}
35impl OpenMode for CreateOrEmpty {}
36impl Permanent for CreateOrEmpty {}
37
38pub enum Create {}
39impl Sealed for Create {
40    const FLAGS: c_int = O_CREAT | O_EXCL;
41}
42impl OpenMode for Create {}
43impl Permanent for Create {}
44
45pub enum CreateTemp {}
46impl Sealed for CreateTemp {
47    const FLAGS: c_int = O_TMPFILE | O_EXCL;
48}
49impl OpenMode for CreateTemp {}
50impl Temporary for CreateTemp {}
51
52pub enum CreateUnlinked {}
53impl Sealed for CreateUnlinked {
54    const FLAGS: c_int = O_TMPFILE;
55}
56impl OpenMode for CreateUnlinked {}
57impl Temporary for CreateUnlinked {}