stable_fs/runtime/
types.rs1#![allow(dead_code)]
2
3use bitflags::bitflags;
4use serde::{Deserialize, Serialize};
5
6pub type Fd = u32;
8
9pub type Rights = u64;
10pub const RIGHTS_FD_DATASYNC: Rights = 1 << 0;
14pub const RIGHTS_FD_READ: Rights = 1 << 1;
17pub const RIGHTS_FD_SEEK: Rights = 1 << 2;
19pub const RIGHTS_FD_FDSTAT_SET_FLAGS: Rights = 1 << 3;
21pub const RIGHTS_FD_SYNC: Rights = 1 << 4;
25pub const RIGHTS_FD_TELL: Rights = 1 << 5;
29pub const RIGHTS_FD_WRITE: Rights = 1 << 6;
32pub const RIGHTS_FD_ADVISE: Rights = 1 << 7;
34pub const RIGHTS_FD_ALLOCATE: Rights = 1 << 8;
36pub const RIGHTS_PATH_CREATE_DIRECTORY: Rights = 1 << 9;
38pub const RIGHTS_PATH_CREATE_FILE: Rights = 1 << 10;
40pub const RIGHTS_PATH_LINK_SOURCE: Rights = 1 << 11;
43pub const RIGHTS_PATH_LINK_TARGET: Rights = 1 << 12;
46pub const RIGHTS_PATH_OPEN: Rights = 1 << 13;
48pub const RIGHTS_FD_READDIR: Rights = 1 << 14;
50pub const RIGHTS_PATH_READLINK: Rights = 1 << 15;
52pub const RIGHTS_PATH_RENAME_SOURCE: Rights = 1 << 16;
54pub const RIGHTS_PATH_RENAME_TARGET: Rights = 1 << 17;
56pub const RIGHTS_PATH_FILESTAT_GET: Rights = 1 << 18;
58pub const RIGHTS_PATH_FILESTAT_SET_SIZE: Rights = 1 << 19;
61pub const RIGHTS_PATH_FILESTAT_SET_TIMES: Rights = 1 << 20;
63pub const RIGHTS_FD_FILESTAT_GET: Rights = 1 << 21;
65pub const RIGHTS_FD_FILESTAT_SET_SIZE: Rights = 1 << 22;
67pub const RIGHTS_FD_FILESTAT_SET_TIMES: Rights = 1 << 23;
69pub const RIGHTS_PATH_SYMLINK: Rights = 1 << 24;
71pub const RIGHTS_PATH_REMOVE_DIRECTORY: Rights = 1 << 25;
73pub const RIGHTS_PATH_UNLINK_FILE: Rights = 1 << 26;
75pub const RIGHTS_POLL_FD_READWRITE: Rights = 1 << 27;
78
79#[derive(Copy, Clone, Debug)]
80pub struct FdStat {
81 pub flags: FdFlags,
82 pub rights_base: Rights,
83 pub rights_inheriting: Rights,
84}
85
86impl Default for FdStat {
87 fn default() -> Self {
88 Self {
89 flags: FdFlags::empty(),
90 rights_base: (1 << 28) - 1, rights_inheriting: (1 << 28) - 1, }
93 }
94}
95
96#[derive(Clone, Copy, Debug)]
97pub enum Whence {
98 SET,
99 CUR,
100 END,
101}
102
103#[derive(Clone, Copy, Debug)]
104pub enum ChunkSize {
105 CHUNK4K = 4096,
106 CHUNK8K = 8192,
107 CHUNK16K = 16384,
108 CHUNK32K = 32768,
109 CHUNK64K = 65536,
110}
111
112impl ChunkSize {
113 pub const VALUES: [Self; 5] = [
114 Self::CHUNK4K,
115 Self::CHUNK8K,
116 Self::CHUNK16K,
117 Self::CHUNK32K,
118 Self::CHUNK64K,
119 ];
120}
121
122#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
123pub enum ChunkType {
124 V1 = 1,
125 V2 = 2,
126}
127
128#[derive(Clone, Copy, Debug)]
129pub enum Advice {
130 Normal = 0,
131 Sequential = 1,
132 Random = 2,
133 WillNeed = 3,
134 DontNeed = 4,
135 NoReuse = 5,
136}
137
138impl TryFrom<u8> for Advice {
139 type Error = crate::error::Error;
140
141 fn try_from(value: u8) -> Result<Self, crate::error::Error> {
142 match value {
143 0 => Ok(Advice::Normal),
144 1 => Ok(Advice::Sequential),
145 2 => Ok(Advice::Random),
146 3 => Ok(Advice::WillNeed),
147 4 => Ok(Advice::DontNeed),
148 5 => Ok(Advice::NoReuse),
149 _ => Err(crate::error::Error::InvalidArgument),
150 }
151 }
152}
153
154impl From<Advice> for u8 {
155 fn from(val: Advice) -> Self {
156 match val {
157 Advice::Normal => 0,
158 Advice::Sequential => 1,
159 Advice::Random => 2,
160 Advice::WillNeed => 3,
161 Advice::DontNeed => 4,
162 Advice::NoReuse => 5,
163 }
164 }
165}
166
167bitflags! {
168 #[derive(Copy, Clone, Debug, PartialEq)]
169 pub struct FdFlags: u16 {
170 const APPEND = 1;
171 const DSYNC = 2;
172 const NONBLOCK = 4;
173 const RSYNC = 8;
174 const SYNC = 16;
175 }
176}
177
178bitflags! {
179 pub struct OpenFlags: u16 {
180 const CREATE = 1;
182 const DIRECTORY = 2;
184 const EXCLUSIVE = 4;
186 const TRUNCATE = 8;
188 }
189}
190
191#[repr(C)]
192#[derive(Copy, Clone, Debug)]
193pub struct DstBuf {
194 pub buf: *mut u8,
195 pub len: usize,
196}
197#[repr(C)]
198#[derive(Copy, Clone, Debug)]
199pub struct SrcBuf {
200 pub buf: *const u8,
201 pub len: usize,
202}
203pub type SrcIoVec<'a> = &'a [SrcBuf];
204pub type DstIoVec<'a> = &'a [DstBuf];