From b9a99211a54d62f556fdf71d5eb91107f11398cf Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Thu, 6 Jan 2022 08:28:05 -0600 Subject: Move Forget and Getattr to new module ops::inode --- src/ops/entry.rs | 93 ++------------------------------------------------------ 1 file changed, 2 insertions(+), 91 deletions(-) (limited to 'src/ops/entry.rs') diff --git a/src/ops/entry.rs b/src/ops/entry.rs index 435188a..c174bc7 100644 --- a/src/ops/entry.rs +++ b/src/ops/entry.rs @@ -1,28 +1,17 @@ -use crate::{ - io::{Mode, Stat}, - private_trait::Sealed, - proto, Done, Ino, Operation, Reply, Request, -}; - use super::{ c_to_os, - traits::{ReplyKnown, ReplyOk, RequestHandle, RequestMode, RequestName}, + traits::{ReplyKnown, ReplyOk, RequestMode, RequestName}, }; +use crate::{io::Mode, private_trait::Sealed, proto, Ino, Operation, Request}; use std::ffi::{CStr, OsStr}; -pub enum Forget {} -pub enum Getattr {} pub enum Mkdir {} pub enum Unlink {} pub enum Rmdir {} pub enum Symlink {} pub enum Link {} -pub trait RequestForget<'o>: Operation<'o> { - fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a>; -} - pub trait RequestTarget<'o>: Operation<'o> { fn target<'a>(request: &'a Request<'o, Self>) -> &'a OsStr; } @@ -31,38 +20,12 @@ pub trait RequestLink<'o>: Operation<'o> { fn source_ino(request: &Request<'o, Self>) -> Ino; } -pub trait ReplyStat<'o>: Operation<'o> { - fn stat(reply: Reply<'o, Self>, inode: &impl Stat) -> Done<'o>; -} - -pub enum ForgetList<'a> { - Single(Option<(Ino, u64)>), - Batch(std::slice::Iter<'a, proto::ForgetOne>), -} - -impl Sealed for Forget {} -impl Sealed for Getattr {} impl Sealed for Mkdir {} impl Sealed for Unlink {} impl Sealed for Rmdir {} impl Sealed for Symlink {} impl Sealed for Link {} -impl<'o> Operation<'o> for Forget { - type RequestBody = proto::OpcodeSelect< - (&'o proto::BatchForgetIn, &'o [proto::ForgetOne]), - &'o proto::ForgetIn, - { proto::Opcode::BatchForget as u32 }, - >; - - type ReplyState = (); -} - -impl<'o> Operation<'o> for Getattr { - type RequestBody = &'o proto::GetattrIn; - type ReplyState = (); -} - impl<'o> Operation<'o> for Mkdir { type RequestBody = (&'o proto::MkdirIn, &'o CStr); type ReplyState = (); @@ -88,58 +51,6 @@ impl<'o> Operation<'o> for Link { type ReplyState = (); } -impl<'o> RequestForget<'o> for Forget { - fn forget_list<'a>(request: &'a Request<'o, Self>) -> ForgetList<'a> { - use {proto::OpcodeSelect::*, ForgetList::*}; - - impl Iterator for ForgetList<'_> { - type Item = (Ino, u64); - - fn next(&mut self) -> Option { - match self { - Single(single) => single.take(), - Batch(batch) => { - let forget = batch.next()?; - Some((Ino(forget.ino), forget.nlookup)) - } - } - } - } - - match request.body { - Match((_, slice)) => Batch(slice.iter()), - Alt(single) => Single(Some((request.ino(), single.nlookup))), - } - } -} - -impl<'o> ReplyOk<'o> for Forget { - fn ok(_reply: Reply<'o, Self>) -> Done<'o> { - // No reply for forget requests - Done::new() - } -} - -impl<'o> RequestHandle<'o> for Getattr { - fn handle(request: &Request<'o, Self>) -> u64 { - request.body.fh - } -} - -impl<'o> ReplyStat<'o> for Getattr { - fn stat(reply: Reply<'o, Self>, inode: &impl Stat) -> Done<'o> { - let (attrs, ttl) = inode.attrs(); - let attrs = attrs.finish(inode); - - reply.single(&proto::AttrOut { - attr_valid: ttl.seconds, - attr_valid_nsec: ttl.nanoseconds, - dummy: Default::default(), - attr: attrs, - }) - } -} - impl<'o> RequestName<'o> for Mkdir { fn name<'a>(request: &'a Request<'o, Self>) -> &'a OsStr { let (_header, name) = request.body; -- cgit v1.2.3