-
Notifications
You must be signed in to change notification settings - Fork 717
Closed
Labels
Description
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?
- Yes, I am willing to contribute to the development of this feature.
Reactions are currently unavailable