Feature Description
Since the CompleteAccessor stores the metadata, and Access::info return the Arc<AccessorInfo>, we can move logic from fn metadata(&self) -> Arc<AccessorInfo> to impl<A: Access> Layer<A> for CompleteLayer to avoid creating a new Arc<AccessorInfo>(this is not add the reference count).
Problem and Solution
just change CompleteAccessor::metadata:
fn metadata(&self) -> Arc<AccessorInfo> {
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()
}
to
fn metadata(&self) -> Arc<AccessorInfo> {
self.meta.clone()
}
and change CompleteLayer::layer:
fn layer(&self, inner: A) -> Self::LayeredAccess {
CompleteAccessor {
meta: inner.info(),
inner: Arc::new(inner),
}
}
to
fn layer(&self, inner: A) -> Self::LayeredAccess {
let mut meta = inner.info().as_ref().clone();
let cap = meta.full_capability_mut();
if cap.list && cap.write_can_empty {
cap.create_dir = true;
}
CompleteAccessor {
meta: meta.into(),
inner: Arc::new(inner),
}
}
Additional Context
All the layers that store the metadata can apply this change.
Are you willing to contribute to the development of this feature?
Feature Description
Since the
CompleteAccessorstores the metadata, andAccess::inforeturn theArc<AccessorInfo>, we can move logic fromfn metadata(&self) -> Arc<AccessorInfo>toimpl<A: Access> Layer<A> for CompleteLayerto avoid creating a newArc<AccessorInfo>(this is not add the reference count).Problem and Solution
just change
CompleteAccessor::metadata:to
and change
CompleteLayer::layer:to
Additional Context
All the layers that store the metadata can apply this change.
Are you willing to contribute to the development of this feature?