diff options
Diffstat (limited to '')
| -rw-r--r-- | src/io.rs (renamed from src/fuse/io.rs) | 0 | ||||
| -rw-r--r-- | src/lib.rs | 60 | ||||
| -rw-r--r-- | src/mod.rs (renamed from src/fuse/mod.rs) | 0 | ||||
| -rw-r--r-- | src/mount.rs (renamed from src/fuse/mount.rs) | 0 | ||||
| -rw-r--r-- | src/ops/dir.rs (renamed from src/fuse/ops/dir.rs) | 2 | ||||
| -rw-r--r-- | src/ops/entry.rs (renamed from src/fuse/ops/entry.rs) | 3 | ||||
| -rw-r--r-- | src/ops/global.rs (renamed from src/fuse/ops/global.rs) | 3 | ||||
| -rw-r--r-- | src/ops/mod.rs (renamed from src/fuse/ops/mod.rs) | 3 | ||||
| -rw-r--r-- | src/ops/open.rs (renamed from src/fuse/ops/open.rs) | 5 | ||||
| -rw-r--r-- | src/ops/rw.rs (renamed from src/fuse/ops/rw.rs) | 5 | ||||
| -rw-r--r-- | src/ops/xattr.rs (renamed from src/fuse/ops/xattr.rs) | 8 | ||||
| -rw-r--r-- | src/session.rs (renamed from src/fuse/session.rs) | 0 |
12 files changed, 64 insertions, 25 deletions
diff --git a/src/fuse/io.rs b/src/io.rs index 7124fda..7124fda 100644 --- a/src/fuse/io.rs +++ b/src/io.rs @@ -8,16 +8,51 @@ #[cfg(not(target_os = "linux"))] compile_error!("Unsupported OS"); -use std::time::{SystemTime, UNIX_EPOCH}; +use std::{ + marker::PhantomData, + time::{SystemTime, UNIX_EPOCH}, +}; pub use nix; -pub use crate::fuse::*; pub use nix::errno::Errno; pub use util::{FuseError, FuseResult}; +pub mod io; +pub mod mount; +pub mod ops; +pub mod session; + mod proto; mod util; -mod fuse; + +pub trait Operation<'o>: private_trait::Sealed + Sized { + type RequestBody: crate::proto::Structured<'o>; + type ReplyTail; +} + +pub type Op<'o, O = ops::Any> = (Request<'o, O>, Reply<'o, O>); + +pub struct Request<'o, O: Operation<'o>> { + header: proto::InHeader, + body: O::RequestBody, +} + +#[must_use] +pub struct Reply<'o, O: Operation<'o>> { + session: &'o session::Session, + unique: u64, + tail: O::ReplyTail, +} + +/// Inode number. +/// +/// This is a public newtype. Users are expected to inspect the underlying `u64` and construct +/// arbitrary `Ino` objects. +#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] +pub struct Ino(pub u64); + +#[must_use] +pub struct Done<'o>(PhantomData<&'o mut &'o ()>); #[derive(Copy, Clone, Eq, PartialEq)] pub struct Ttl { @@ -31,12 +66,15 @@ pub struct Timestamp { nanoseconds: u32, } -/// Inode number. -/// -/// This is a public newtype. Users are expected to inspect the underlying `u64` and construct -/// arbitrary `Ino` objects. -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)] -pub struct Ino(pub u64); +impl Done<'_> { + fn new() -> Self { + Done(PhantomData) + } + + fn consume(self) { + drop(self); + } +} impl Ino { /// The invalid inode number, mostly useful for internal aspects of the FUSE protocol. @@ -122,3 +160,7 @@ impl From<SystemTime> for Timestamp { } } } + +mod private_trait { + pub trait Sealed {} +} diff --git a/src/fuse/mod.rs b/src/mod.rs index 84c6878..84c6878 100644 --- a/src/fuse/mod.rs +++ b/src/mod.rs diff --git a/src/fuse/mount.rs b/src/mount.rs index c924a9a..c924a9a 100644 --- a/src/fuse/mount.rs +++ b/src/mount.rs diff --git a/src/fuse/ops/dir.rs b/src/ops/dir.rs index 76267ec..cb3a4f7 100644 --- a/src/fuse/ops/dir.rs +++ b/src/ops/dir.rs @@ -5,7 +5,7 @@ use std::{ os::unix::ffi::OsStrExt, }; -use crate::fuse::{ +use crate::{ io::{Entry, EntryType, Interruptible, Known, Stat}, private_trait::Sealed, Done, Operation, Reply, Request, diff --git a/src/fuse/ops/entry.rs b/src/ops/entry.rs index 9475a61..d3e2b17 100644 --- a/src/fuse/ops/entry.rs +++ b/src/ops/entry.rs @@ -1,5 +1,4 @@ -use crate::{proto, Ino}; -use crate::fuse::{io::Stat, private_trait::Sealed, Done, Operation, Reply, Request}; +use crate::{io::Stat, private_trait::Sealed, proto, Done, Ino, Operation, Reply, Request}; pub enum Forget {} pub enum Getattr {} diff --git a/src/fuse/ops/global.rs b/src/ops/global.rs index e2ecd7b..cd6b260 100644 --- a/src/fuse/ops/global.rs +++ b/src/ops/global.rs @@ -1,5 +1,4 @@ -use crate::{proto, util::page_size}; -use crate::fuse::{io::FsInfo, private_trait::Sealed, Done, Operation, Reply}; +use crate::{io::FsInfo, private_trait::Sealed, proto, util::page_size, Done, Operation, Reply}; pub enum Init {} pub enum Statfs {} diff --git a/src/fuse/ops/mod.rs b/src/ops/mod.rs index 39a4ef0..13d146d 100644 --- a/src/fuse/ops/mod.rs +++ b/src/ops/mod.rs @@ -3,8 +3,7 @@ use std::{ os::unix::ffi::OsStrExt, }; -use crate::util::OutputChain; -use super::{private_trait::Sealed, Done, Operation, Reply, Request}; +use crate::{private_trait::Sealed, util::OutputChain, Done, Operation, Reply, Request}; use bytemuck::{bytes_of, Pod}; mod dir; diff --git a/src/fuse/ops/open.rs b/src/ops/open.rs index ff41d05..9123421 100644 --- a/src/fuse/ops/open.rs +++ b/src/ops/open.rs @@ -1,10 +1,9 @@ -use crate::fuse::{ +use crate::{ io::{AccessFlags, OpenFlags}, private_trait::Sealed, - Done, Operation, Reply, Request, + proto, Done, Errno, Operation, Reply, Request, }; -use crate::{proto, Errno}; use super::FromRequest; pub enum Open {} diff --git a/src/fuse/ops/rw.rs b/src/ops/rw.rs index 726143b..b1c184b 100644 --- a/src/fuse/ops/rw.rs +++ b/src/ops/rw.rs @@ -1,7 +1,6 @@ -use std::{ffi::OsStr, os::unix::ffi::OsStrExt}; -use crate::{proto, util::OutputChain}; -use crate::fuse::{private_trait::Sealed, Done, Operation, Reply, Request}; use super::FromRequest; +use crate::{private_trait::Sealed, proto, util::OutputChain, Done, Operation, Reply, Request}; +use std::{ffi::OsStr, os::unix::ffi::OsStrExt}; pub enum Readlink {} pub enum Read {} diff --git a/src/fuse/ops/xattr.rs b/src/ops/xattr.rs index 48d10bf..886b290 100644 --- a/src/fuse/ops/xattr.rs +++ b/src/ops/xattr.rs @@ -1,7 +1,9 @@ -use std::ffi::{CStr, OsStr}; -use crate::{proto, util::OutputChain, Errno}; -use crate::fuse::{private_trait::Sealed, Done, Operation, Reply, Request}; +use crate::{ + private_trait::Sealed, proto, util::OutputChain, Done, Errno, Operation, Reply, Request, +}; + use super::c_to_os; +use std::ffi::{CStr, OsStr}; pub enum Setxattr {} pub enum Getxattr {} diff --git a/src/fuse/session.rs b/src/session.rs index e83a8d4..e83a8d4 100644 --- a/src/fuse/session.rs +++ b/src/session.rs |
