From 1ebb0bc74322b1593acd599dc1a17771c8f19d76 Mon Sep 17 00:00:00 2001 From: koushiro Date: Sat, 26 Oct 2024 02:00:35 +0800 Subject: [PATCH] apply for layers --- core/src/layers/blocking.rs | 10 +++++++--- core/src/layers/complete.rs | 20 ++++++++++---------- core/src/layers/immutable_index.rs | 15 ++++++++------- core/src/layers/retry.rs | 25 ++++++++++++------------- core/src/layers/timeout.rs | 15 +++++++-------- 5 files changed, 44 insertions(+), 41 deletions(-) diff --git a/core/src/layers/blocking.rs b/core/src/layers/blocking.rs index 8deb767e6c1f..6615a95d9a8e 100644 --- a/core/src/layers/blocking.rs +++ b/core/src/layers/blocking.rs @@ -174,9 +174,13 @@ impl LayeredAccess for BlockingAccessor { } fn metadata(&self) -> Arc { - let mut meta = self.inner.info().as_ref().clone(); - meta.full_capability_mut().blocking = true; - meta.into() + let info = self.inner.info().as_ref().clone(); + let cap = info.full_capability(); + info.set_full_capability(Capability { + blocking: true, + ..cap + }) + .into() } async fn create_dir(&self, path: &str, args: OpCreateDir) -> Result { diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs index 17c0c6414a01..c032f4041cc6 100644 --- a/core/src/layers/complete.rs +++ b/core/src/layers/complete.rs @@ -378,12 +378,13 @@ impl LayeredAccess for CompleteAccessor { // Todo: May move the logic to the implement of Layer::layer of CompleteAccessor fn metadata(&self) -> Arc { - let mut meta = (*self.meta).clone(); - let cap = meta.full_capability_mut(); - if cap.list && cap.write_can_empty { - cap.create_dir = true; - } - meta.into() + let info = (*self.meta).clone(); + let cap = info.full_capability(); + info.set_full_capability(Capability { + create_dir: cap.list && cap.write_can_empty, + ..cap + }) + .into() } async fn create_dir(&self, path: &str, args: OpCreateDir) -> Result { @@ -728,10 +729,9 @@ mod tests { type BlockingLister = oio::BlockingLister; fn info(&self) -> Arc { - let mut info = AccessorInfo::default(); - info.set_native_capability(self.capability); - - info.into() + AccessorInfo::default() + .set_native_capability(self.capability) + .into() } async fn create_dir(&self, _: &str, _: OpCreateDir) -> Result { diff --git a/core/src/layers/immutable_index.rs b/core/src/layers/immutable_index.rs index 5e02472fab6a..99d7e478f32c 100644 --- a/core/src/layers/immutable_index.rs +++ b/core/src/layers/immutable_index.rs @@ -150,13 +150,14 @@ impl LayeredAccess for ImmutableIndexAccessor { /// Add list capabilities for underlying storage services. fn metadata(&self) -> Arc { - let mut meta = (*self.inner.info()).clone(); - - let cap = meta.full_capability_mut(); - cap.list = true; - cap.list_with_recursive = true; - - meta.into() + let info = (*self.inner.info()).clone(); + let cap = info.full_capability(); + info.set_full_capability(Capability { + list: true, + list_with_recursive: true, + ..cap + }) + .into() } async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::Reader)> { diff --git a/core/src/layers/retry.rs b/core/src/layers/retry.rs index b98fd7eecce9..e8b3b36d1ff2 100644 --- a/core/src/layers/retry.rs +++ b/core/src/layers/retry.rs @@ -798,19 +798,18 @@ mod tests { type BlockingLister = (); fn info(&self) -> Arc { - let mut am = AccessorInfo::default(); - am.set_native_capability(Capability { - read: true, - write: true, - write_can_multi: true, - stat: true, - list: true, - list_with_recursive: true, - batch: true, - ..Default::default() - }); - - am.into() + AccessorInfo::default() + .set_native_capability(Capability { + read: true, + write: true, + write_can_multi: true, + stat: true, + list: true, + list_with_recursive: true, + batch: true, + ..Default::default() + }) + .into() } async fn stat(&self, _: &str, _: OpStat) -> Result { diff --git a/core/src/layers/timeout.rs b/core/src/layers/timeout.rs index 2bda1292b03b..90ed5580b4aa 100644 --- a/core/src/layers/timeout.rs +++ b/core/src/layers/timeout.rs @@ -410,14 +410,13 @@ mod tests { type BlockingLister = (); fn info(&self) -> Arc { - let mut am = AccessorInfo::default(); - am.set_native_capability(Capability { - read: true, - delete: true, - ..Default::default() - }); - - am.into() + AccessorInfo::default() + .set_native_capability(Capability { + read: true, + delete: true, + ..Default::default() + }) + .into() } /// This function will build a reader that always return pending.