/// 文件打开标志(映射 SSH_FXF_* 和 POSIX open flags) #[derive(Debug, Clone, Default)] pub struct OpenFlags { pub read: bool, pub write: bool, pub append: bool, pub create: bool, pub truncate: bool, pub exclusive: bool, pub mode: u32, } impl OpenFlags { pub fn new() -> Self { Self::default() } pub fn read(mut self) -> Self { self.read = true; self } pub fn write(mut self) -> Self { self.write = true; self } pub fn append(mut self) -> Self { self.append = true; self.write = true; self } pub fn create(mut self) -> Self { self.create = true; self.write = true; self } pub fn truncate(mut self) -> Self { self.truncate = true; self.write = true; self } pub fn exclusive(mut self) -> Self { self.exclusive = true; self } pub fn mode(mut self, mode: u32) -> Self { self.mode = mode; self } /// 从 SFTP 的 pflags(SSH_FXF_*)构建 OpenFlags pub fn from_sftp_pflags(pflags: u32) -> Self { let read = pflags & 0x00000001 != 0; let write = pflags & 0x00000002 != 0; let append = pflags & 0x00000004 != 0; let create = pflags & 0x00000008 != 0; let truncate = pflags & 0x00000010 != 0; let exclusive = pflags & 0x00000020 != 0; Self { read, write, append, create, truncate, exclusive, mode: 0o644, } } }