#![forbid(unsafe_code)]
#![feature(try_trait_v2)]
#[cfg(not(target_os = "linux"))]
compile_error!("Unsupported OS");
use std::marker::PhantomData;
pub use self::error::{FuseError, FuseResult};
#[doc(no_inline)]
pub use nix::{self, errno::Errno};
pub mod error;
pub mod io;
pub mod mount;
pub mod ops;
pub mod session;
mod proto;
mod util;
pub trait Operation<'o>: sealed::Sealed + Sized {
type RequestBody: crate::proto::Structured<'o>;
type ReplyState;
}
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,
state: O::ReplyState,
}
#[must_use]
pub struct Done<'o>(PhantomData<&'o mut &'o ()>);
impl Done<'_> {
fn new() -> Self {
Done(PhantomData)
}
fn consume(self) {
drop(self);
}
}
mod sealed {
pub trait Sealed {}
}