Skip to content

Commit 4a21435

Browse files
authored
feat: implement additional traits for nfs types (#106)
1 parent e8149dd commit 4a21435

3 files changed

Lines changed: 30 additions & 24 deletions

File tree

crates/nfs3_server/src/memfs/mod.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ impl Dir {
7070
rdev: specdata3::default(),
7171
fsid: 0,
7272
fileid: id.into(),
73-
atime: current_time.clone(),
74-
mtime: current_time.clone(),
73+
atime: current_time,
74+
mtime: current_time,
7575
ctime: current_time,
7676
};
7777
Self {
@@ -120,8 +120,8 @@ impl File {
120120
rdev: specdata3::default(),
121121
fsid: 0,
122122
fileid: id.into(),
123-
atime: current_time.clone(),
124-
mtime: current_time.clone(),
123+
atime: current_time,
124+
mtime: current_time,
125125
ctime: current_time,
126126
};
127127
Self {
@@ -267,7 +267,7 @@ impl Entry {
267267
}
268268
}
269269

270-
fn set_attr(&mut self, setattr: sattr3) {
270+
fn set_attr(&mut self, setattr: &sattr3) {
271271
{
272272
let attr = self.attr_mut();
273273
match setattr.atime {
@@ -579,7 +579,7 @@ impl MemFs {
579579
if entry.is_dir {
580580
fs.add_dir(id, name)?;
581581
} else {
582-
fs.add_file(id, name, sattr3::default(), entry.content, None)?;
582+
fs.add_file(id, name, &sattr3::default(), entry.content, None)?;
583583
}
584584
}
585585

@@ -611,7 +611,7 @@ impl MemFs {
611611
&self,
612612
dirid: FileHandleU64,
613613
filename: filename3<'static>,
614-
attr: sattr3,
614+
attr: &sattr3,
615615
content: Vec<u8>,
616616
verf: Option<createverf3>,
617617
) -> Result<(FileHandleU64, fattr3), nfsstat3> {
@@ -749,7 +749,7 @@ impl NfsFileSystem for MemFs {
749749
async fn setattr(&self, id: &FileHandleU64, setattr: sattr3) -> Result<fattr3, nfsstat3> {
750750
let mut fs = self.fs.write().expect("lock is poisoned");
751751
let entry = fs.get_mut(*id).ok_or(nfsstat3::NFS3ERR_NOENT)?;
752-
entry.set_attr(setattr);
752+
entry.set_attr(&setattr);
753753
Ok(entry.attr().clone())
754754
}
755755

@@ -772,7 +772,7 @@ impl NfsFileSystem for MemFs {
772772
filename: &filename3<'_>,
773773
attr: sattr3,
774774
) -> Result<(FileHandleU64, fattr3), nfsstat3> {
775-
self.add_file(*dirid, filename.clone_to_owned(), attr, Vec::new(), None)
775+
self.add_file(*dirid, filename.clone_to_owned(), &attr, Vec::new(), None)
776776
}
777777

778778
async fn create_exclusive(
@@ -784,7 +784,7 @@ impl NfsFileSystem for MemFs {
784784
self.add_file(
785785
*dirid,
786786
filename.clone_to_owned(),
787-
sattr3::default(),
787+
&sattr3::default(),
788788
Vec::new(),
789789
Some(createverf),
790790
)

crates/nfs3_server/src/nfs_handlers.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ where
664664
let ctime;
665665
let before = match get_wcc_attr(context, &id).await {
666666
Ok(wccattr) => {
667-
ctime = wccattr.ctime.clone();
667+
ctime = wccattr.ctime;
668668
pre_op_attr::Some(wccattr)
669669
}
670670
Err(stat) => {

crates/nfs3_types/src/nfs3.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ pub type SETATTR3res = Nfs3Result<SETATTR3resok, SETATTR3resfail>;
128128
pub type SYMLINK3res = Nfs3Result<SYMLINK3resok, SYMLINK3resfail>;
129129
pub type WRITE3res = Nfs3Result<WRITE3resok, WRITE3resfail>;
130130

131-
#[derive(Debug, Clone, Default, PartialEq, Eq, XdrCodec)]
131+
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, XdrCodec)]
132132
pub enum Nfs3Option<T: Pack + Unpack> {
133133
#[xdr(1)]
134134
Some(T),
@@ -565,8 +565,9 @@ pub enum createhow3 {
565565
EXCLUSIVE(createverf3),
566566
}
567567

568-
#[derive(Copy, Clone, Debug, Eq, PartialEq, XdrCodec)]
568+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, XdrCodec)]
569569
pub enum createmode3 {
570+
#[default]
570571
UNCHECKED = 0,
571572
GUARDED = 1,
572573
EXCLUSIVE = 2,
@@ -632,7 +633,7 @@ pub struct fattr3 {
632633
pub ctime: nfstime3,
633634
}
634635

635-
#[derive(Debug, Eq, PartialEq, XdrCodec)]
636+
#[derive(Debug, Clone, Eq, PartialEq, XdrCodec)]
636637
pub struct filename3<'a>(pub Opaque<'a>);
637638

638639
impl From<Vec<u8>> for filename3<'static> {
@@ -676,8 +677,9 @@ impl PartialEq<[u8]> for filename3<'_> {
676677
}
677678
}
678679

679-
#[derive(Copy, Clone, Debug, Eq, PartialEq, XdrCodec)]
680+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, XdrCodec)]
680681
pub enum ftype3 {
682+
#[default]
681683
NF3REG = 1,
682684
NF3DIR = 2,
683685
NF3BLK = 3,
@@ -746,8 +748,9 @@ impl PartialEq<[u8]> for nfspath3<'_> {
746748
}
747749
}
748750

749-
#[derive(Copy, Clone, Debug, Eq, PartialEq, XdrCodec)]
751+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, XdrCodec)]
750752
pub enum nfsstat3 {
753+
#[default]
751754
NFS3_OK = 0,
752755
NFS3ERR_PERM = 1,
753756
NFS3ERR_NOENT = 2,
@@ -816,7 +819,7 @@ impl std::fmt::Display for nfsstat3 {
816819
}
817820
}
818821

819-
#[derive(Clone, Default, Debug, Eq, PartialEq, XdrCodec)]
822+
#[derive(Clone, Copy, Default, Debug, Eq, PartialEq, XdrCodec)]
820823
pub struct nfstime3 {
821824
pub seconds: u32,
822825
pub nseconds: u32,
@@ -844,7 +847,7 @@ pub struct sattr3 {
844847
pub mtime: set_mtime,
845848
}
846849

847-
#[derive(Default, Debug, Clone, XdrCodec)]
850+
#[derive(Default, Debug, Clone, Copy, XdrCodec)]
848851
pub enum set_atime {
849852
#[default]
850853
#[xdr(0)]
@@ -855,7 +858,7 @@ pub enum set_atime {
855858
SET_TO_CLIENT_TIME(nfstime3), // = 2,
856859
}
857860

858-
#[derive(Default, Debug, Clone, XdrCodec)]
861+
#[derive(Default, Debug, Clone, Copy, XdrCodec)]
859862
pub enum set_mtime {
860863
#[default]
861864
#[xdr(0)]
@@ -872,8 +875,9 @@ pub struct specdata3 {
872875
pub specdata2: u32,
873876
}
874877

875-
#[derive(Copy, Clone, Debug, Eq, PartialEq, XdrCodec)]
878+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, XdrCodec)]
876879
pub enum stable_how {
880+
#[default]
877881
UNSTABLE = 0,
878882
DATA_SYNC = 1,
879883
FILE_SYNC = 2,
@@ -885,14 +889,15 @@ pub struct symlinkdata3<'a> {
885889
pub symlink_data: nfspath3<'a>,
886890
}
887891

888-
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
892+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
889893
pub enum time_how {
894+
#[default]
890895
DONT_CHANGE = 0,
891896
SET_TO_SERVER_TIME = 1,
892897
SET_TO_CLIENT_TIME = 2,
893898
}
894899

895-
#[derive(Debug, XdrCodec)]
900+
#[derive(Debug, Clone, Copy, XdrCodec)]
896901
pub struct wcc_attr {
897902
pub size: size3,
898903
pub mtime: nfstime3,
@@ -905,7 +910,7 @@ pub struct wcc_data {
905910
pub after: post_op_attr,
906911
}
907912

908-
#[derive(Copy, Clone, Debug, Eq, PartialEq, XdrCodec)]
913+
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq, XdrCodec)]
909914
pub struct writeverf3(pub [u8; NFS3_WRITEVERFSIZE]);
910915

911916
pub type cookie3 = u64;
@@ -978,8 +983,9 @@ impl Unpack for mknoddata3 {
978983
}
979984
}
980985

981-
#[derive(Debug, Copy, Clone, PartialEq, Eq, XdrCodec)]
986+
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq, XdrCodec)]
982987
pub enum NFS_PROGRAM {
988+
#[default]
983989
NFSPROC3_NULL = 0,
984990
NFSPROC3_GETATTR = 1,
985991
NFSPROC3_SETATTR = 2,

0 commit comments

Comments
 (0)