use std::ffi::OsString;
use std::time::{Duration, SystemTime};
use futures_util::stream::Stream;
#[cfg(feature = "file-lock")]
pub use crate::raw::reply::ReplyLock;
pub use crate::raw::reply::{
ReplyBmap, ReplyCopyFileRange, ReplyData, ReplyLSeek, ReplyOpen, ReplyPoll, ReplyStatFs,
ReplyWrite, ReplyXAttr,
};
use crate::{FileType, Inode, Result};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct FileAttr {
pub size: u64,
pub blocks: u64,
pub atime: SystemTime,
pub mtime: SystemTime,
pub ctime: SystemTime,
#[cfg(target_os = "macos")]
pub crtime: SystemTime,
pub kind: FileType,
pub perm: u16,
pub nlink: u32,
pub uid: u32,
pub gid: u32,
pub rdev: u32,
#[cfg(target_os = "macos")]
pub flags: u32,
pub blksize: u32,
}
impl From<(Inode, FileAttr)> for crate::raw::reply::FileAttr {
fn from((inode, attr): (u64, FileAttr)) -> Self {
crate::raw::reply::FileAttr {
ino: inode,
generation: 0,
size: attr.size,
blocks: attr.blocks,
atime: attr.atime,
mtime: attr.mtime,
ctime: attr.ctime,
kind: attr.kind,
perm: attr.perm,
nlink: attr.nlink,
uid: attr.uid,
gid: attr.gid,
rdev: attr.rdev,
blksize: attr.blksize,
}
}
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct ReplyEntry {
pub ttl: Duration,
pub attr: FileAttr,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct ReplyAttr {
pub ttl: Duration,
pub attr: FileAttr,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct ReplyCreated {
pub ttl: Duration,
pub attr: FileAttr,
pub generation: u64,
pub fh: u64,
pub flags: u32,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DirectoryEntry {
pub kind: FileType,
pub name: OsString,
}
pub struct ReplyDirectory<S: Stream<Item = Result<DirectoryEntry>>> {
pub entries: S,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct DirectoryEntryPlus {
pub kind: FileType,
pub name: OsString,
pub attr: FileAttr,
pub entry_ttl: Duration,
pub attr_ttl: Duration,
}
pub struct ReplyDirectoryPlus<S: Stream<Item = Result<DirectoryEntryPlus>>> {
pub entries: S,
}