summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-01-04 06:49:48 -0600
committerAlejandro Soto <alejandro@34project.org>2022-01-04 06:49:52 -0600
commit70baa472b2bee69f205cc1aada304d597b858005 (patch)
tree7a0b1a0381b68fe0e091b87d00634ff13568bf6d /src
parent1955ec118a32d3fa174496abe5442c82c609273a (diff)
Move crate::fuse::* to the top-level
Diffstat (limited to '')
-rw-r--r--src/io.rs (renamed from src/fuse/io.rs)0
-rw-r--r--src/lib.rs60
-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
diff --git a/src/lib.rs b/src/lib.rs
index 891c022..f811ba1 100644
--- a/src/lib.rs
+++ b/src/lib.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