This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-opendal.git
The following commit(s) were added to refs/heads/main by this push:
new 879df0b2f feat(core): exposing `Metadata::metakey()` api (#3373)
879df0b2f is described below
commit 879df0b2ff322d3e20acf1059c3ac4ab93f98949
Author: G-XD <[email protected]>
AuthorDate: Wed Oct 25 17:35:39 2023 +0800
feat(core): exposing `Metadata::metakey()` api (#3373)
* feat(core): exposing Metadata::metakey() api
* refactor(core): rename bit to metakey
---
core/src/layers/complete.rs | 8 ++--
core/src/types/list.rs | 4 +-
core/src/types/metadata.rs | 99 ++++++++++++++++++++++++---------------------
3 files changed, 59 insertions(+), 52 deletions(-)
diff --git a/core/src/layers/complete.rs b/core/src/layers/complete.rs
index 82e8066e4..de32637fe 100644
--- a/core/src/layers/complete.rs
+++ b/core/src/layers/complete.rs
@@ -459,8 +459,8 @@ impl<A: Accessor> LayeredAccessor for
CompleteReaderAccessor<A> {
self.inner.stat(path, args).await.map(|v| {
v.map_metadata(|m| {
- let bit = m.bit();
- m.with_bit(bit | Metakey::Complete)
+ let bit = m.metakey();
+ m.with_metakey(bit | Metakey::Complete)
})
})
}
@@ -561,8 +561,8 @@ impl<A: Accessor> LayeredAccessor for
CompleteReaderAccessor<A> {
self.inner.blocking_stat(path, args).map(|v| {
v.map_metadata(|m| {
- let bit = m.bit();
- m.with_bit(bit | Metakey::Complete)
+ let bit = m.metakey();
+ m.with_metakey(bit | Metakey::Complete)
})
})
}
diff --git a/core/src/types/list.rs b/core/src/types/list.rs
index fbc64e71b..5d0325b47 100644
--- a/core/src/types/list.rs
+++ b/core/src/types/list.rs
@@ -91,7 +91,7 @@ impl Stream for Lister {
if let Some(oe) = self.buf.pop_front() {
let (path, metadata) = oe.into_entry().into_parts();
// TODO: we can optimize this by checking the provided metakey
provided by services.
- if metadata.contains_bit(self.required_metakey) {
+ if metadata.contains_metakey(self.required_metakey) {
return Poll::Ready(Some(Ok(Entry::new(path, metadata))));
}
@@ -178,7 +178,7 @@ impl Iterator for BlockingLister {
if let Some(oe) = self.buf.pop_front() {
let (path, metadata) = oe.into_entry().into_parts();
// TODO: we can optimize this by checking the provided metakey
provided by services.
- if metadata.contains_bit(self.required_metakey) {
+ if metadata.contains_metakey(self.required_metakey) {
return Some(Ok(Entry::new(path, metadata)));
}
diff --git a/core/src/types/metadata.rs b/core/src/types/metadata.rs
index 66a7b41d4..c78413ba2 100644
--- a/core/src/types/metadata.rs
+++ b/core/src/types/metadata.rs
@@ -31,8 +31,8 @@ use crate::*;
/// a.k.a., `Entry`'s content length could be `None`.
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct Metadata {
- /// bit stores current key store.
- bit: FlagSet<Metakey>,
+ /// metakey stores current key store.
+ metakey: FlagSet<Metakey>,
mode: EntryMode,
@@ -51,14 +51,14 @@ impl Metadata {
/// Create a new metadata
pub fn new(mode: EntryMode) -> Self {
// Mode is required to be set for metadata.
- let mut bit: FlagSet<Metakey> = Metakey::Mode.into();
+ let mut metakey: FlagSet<Metakey> = Metakey::Mode.into();
// If mode is dir, we should always mark it as complete.
if mode.is_dir() {
- bit |= Metakey::Complete
+ metakey |= Metakey::Complete
}
Self {
- bit,
+ metakey,
mode,
@@ -74,33 +74,35 @@ impl Metadata {
}
}
- /// Get the bit from metadata.
- pub(crate) fn bit(&self) -> FlagSet<Metakey> {
- self.bit
+ /// Get the metakey from metadata.
+ ///
+ /// This value describes which metadata has been set.
+ pub fn metakey(&self) -> FlagSet<Metakey> {
+ self.metakey
}
- /// Set bit with given.
- pub(crate) fn with_bit(mut self, bit: impl Into<FlagSet<Metakey>>) -> Self
{
- self.bit = bit.into();
+ /// Set metakey with given.
+ pub(crate) fn with_metakey(mut self, metakey: impl Into<FlagSet<Metakey>>)
-> Self {
+ self.metakey = metakey.into();
self
}
- /// Check if there metadata already contains given bit.
- pub(crate) fn contains_bit(&self, bit: impl Into<FlagSet<Metakey>>) ->
bool {
- let input_bit = bit.into();
+ /// Check if there metadata already contains given metakey.
+ pub(crate) fn contains_metakey(&self, metakey: impl
Into<FlagSet<Metakey>>) -> bool {
+ let input_metakey = metakey.into();
// If meta already contains complete, we don't need to check.
- if self.bit.contains(Metakey::Complete) {
+ if self.metakey.contains(Metakey::Complete) {
return true;
}
- self.bit.contains(input_bit)
+ self.metakey.contains(input_metakey)
}
/// mode represent this entry's mode.
pub fn mode(&self) -> EntryMode {
debug_assert!(
- self.bit.contains(Metakey::Mode) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::Mode) ||
self.metakey.contains(Metakey::Complete),
"visiting not set metadata: mode, maybe a bug"
);
@@ -120,14 +122,14 @@ impl Metadata {
/// Set mode for entry.
pub fn set_mode(&mut self, v: EntryMode) -> &mut Self {
self.mode = v;
- self.bit |= Metakey::Mode;
+ self.metakey |= Metakey::Mode;
self
}
/// Set mode for entry.
pub fn with_mode(mut self, v: EntryMode) -> Self {
self.mode = v;
- self.bit |= Metakey::Mode;
+ self.metakey |= Metakey::Mode;
self
}
@@ -136,7 +138,8 @@ impl Metadata {
/// Refer to [MDN
Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)
for more information.
pub fn cache_control(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::CacheControl) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::CacheControl)
+ || self.metakey.contains(Metakey::Complete),
"visiting not set metadata: cache_control, maybe a bug"
);
@@ -149,7 +152,7 @@ impl Metadata {
/// Refer to [MDN
Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)
for more information.
pub fn set_cache_control(&mut self, v: &str) -> &mut Self {
self.cache_control = Some(v.to_string());
- self.bit |= Metakey::CacheControl;
+ self.metakey |= Metakey::CacheControl;
self
}
@@ -159,7 +162,7 @@ impl Metadata {
/// Refer to [MDN
Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)
for more information.
pub fn with_cache_control(mut self, v: String) -> Self {
self.cache_control = Some(v);
- self.bit |= Metakey::CacheControl;
+ self.metakey |= Metakey::CacheControl;
self
}
@@ -174,7 +177,8 @@ impl Metadata {
/// [`Metakey::ContentLength`], otherwise it will panic.
pub fn content_length(&self) -> u64 {
debug_assert!(
- self.bit.contains(Metakey::ContentLength) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::ContentLength)
+ || self.metakey.contains(Metakey::Complete),
"visiting not set metadata: content_length, maybe a bug"
);
@@ -189,14 +193,14 @@ impl Metadata {
/// Set content length of this entry.
pub fn set_content_length(&mut self, v: u64) -> &mut Self {
self.content_length = Some(v);
- self.bit |= Metakey::ContentLength;
+ self.metakey |= Metakey::ContentLength;
self
}
/// Set content length of this entry.
pub fn with_content_length(mut self, v: u64) -> Self {
self.content_length = Some(v);
- self.bit |= Metakey::ContentLength;
+ self.metakey |= Metakey::ContentLength;
self
}
@@ -213,7 +217,7 @@ impl Metadata {
/// [`Metakey::ContentMd5`], otherwise it will panic.
pub fn content_md5(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::ContentMd5) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::ContentMd5) ||
self.metakey.contains(Metakey::Complete),
"visiting not set metadata: content_md5, maybe a bug"
);
@@ -226,7 +230,7 @@ impl Metadata {
/// And removed by [RFC 7231](https://www.rfc-editor.org/rfc/rfc7231).
pub fn set_content_md5(&mut self, v: &str) -> &mut Self {
self.content_md5 = Some(v.to_string());
- self.bit |= Metakey::ContentMd5;
+ self.metakey |= Metakey::ContentMd5;
self
}
@@ -236,7 +240,7 @@ impl Metadata {
/// And removed by [RFC 7231](https://www.rfc-editor.org/rfc/rfc7231).
pub fn with_content_md5(mut self, v: String) -> Self {
self.content_md5 = Some(v);
- self.bit |= Metakey::ContentMd5;
+ self.metakey |= Metakey::ContentMd5;
self
}
@@ -250,7 +254,7 @@ impl Metadata {
/// [`Metakey::ContentType`], otherwise it will panic.
pub fn content_type(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::ContentType) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::ContentType) ||
self.metakey.contains(Metakey::Complete),
"visiting not set metadata: content_type, maybe a bug"
);
@@ -262,7 +266,7 @@ impl Metadata {
/// Content Type is defined by [RFC
9110](https://httpwg.org/specs/rfc9110.html#field.content-type).
pub fn set_content_type(&mut self, v: &str) -> &mut Self {
self.content_type = Some(v.to_string());
- self.bit |= Metakey::ContentType;
+ self.metakey |= Metakey::ContentType;
self
}
@@ -271,7 +275,7 @@ impl Metadata {
/// Content Type is defined by [RFC
9110](https://httpwg.org/specs/rfc9110.html#field.content-type).
pub fn with_content_type(mut self, v: String) -> Self {
self.content_type = Some(v);
- self.bit |= Metakey::ContentType;
+ self.metakey |= Metakey::ContentType;
self
}
@@ -285,7 +289,8 @@ impl Metadata {
/// [`Metakey::ContentRange`], otherwise it will panic.
pub fn content_range(&self) -> Option<BytesContentRange> {
debug_assert!(
- self.bit.contains(Metakey::ContentRange) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::ContentRange)
+ || self.metakey.contains(Metakey::Complete),
"visiting not set metadata: content_range, maybe a bug"
);
@@ -297,7 +302,7 @@ impl Metadata {
/// Content Range is defined by [RFC
9110](https://httpwg.org/specs/rfc9110.html#field.content-range).
pub fn set_content_range(&mut self, v: BytesContentRange) -> &mut Self {
self.content_range = Some(v);
- self.bit |= Metakey::ContentRange;
+ self.metakey |= Metakey::ContentRange;
self
}
@@ -306,7 +311,7 @@ impl Metadata {
/// Content Range is defined by [RFC
9110](https://httpwg.org/specs/rfc9110.html#field.content-range).
pub fn with_content_range(mut self, v: BytesContentRange) -> Self {
self.content_range = Some(v);
- self.bit |= Metakey::ContentRange;
+ self.metakey |= Metakey::ContentRange;
self
}
@@ -323,7 +328,8 @@ impl Metadata {
/// [`Metakey::LastModified`], otherwise it will panic.
pub fn last_modified(&self) -> Option<DateTime<Utc>> {
debug_assert!(
- self.bit.contains(Metakey::LastModified) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::LastModified)
+ || self.metakey.contains(Metakey::Complete),
"visiting not set metadata: last_modified, maybe a bug"
);
@@ -336,7 +342,7 @@ impl Metadata {
/// Refer to [MDN
Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)
for more information.
pub fn set_last_modified(&mut self, v: DateTime<Utc>) -> &mut Self {
self.last_modified = Some(v);
- self.bit |= Metakey::LastModified;
+ self.metakey |= Metakey::LastModified;
self
}
@@ -346,7 +352,7 @@ impl Metadata {
/// Refer to [MDN
Last-Modified](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)
for more information.
pub fn with_last_modified(mut self, v: DateTime<Utc>) -> Self {
self.last_modified = Some(v);
- self.bit |= Metakey::LastModified;
+ self.metakey |= Metakey::LastModified;
self
}
@@ -368,7 +374,7 @@ impl Metadata {
/// [`Metakey::Etag`], otherwise it will panic.
pub fn etag(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::Etag) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::Etag) ||
self.metakey.contains(Metakey::Complete),
"visiting not set metadata: etag, maybe a bug"
);
@@ -388,7 +394,7 @@ impl Metadata {
/// `"` is part of etag, don't trim it before setting.
pub fn set_etag(&mut self, v: &str) -> &mut Self {
self.etag = Some(v.to_string());
- self.bit |= Metakey::Etag;
+ self.metakey |= Metakey::Etag;
self
}
@@ -405,7 +411,7 @@ impl Metadata {
/// `"` is part of etag, don't trim it before setting.
pub fn with_etag(mut self, v: String) -> Self {
self.etag = Some(v);
- self.bit |= Metakey::Etag;
+ self.metakey |= Metakey::Etag;
self
}
@@ -427,7 +433,8 @@ impl Metadata {
/// [`Metakey::ContentDisposition`], otherwise it will panic.
pub fn content_disposition(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::ContentDisposition) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::ContentDisposition)
+ || self.metakey.contains(Metakey::Complete),
"visiting not set metadata: content_disposition, maybe a bug"
);
@@ -447,7 +454,7 @@ impl Metadata {
/// - "attachment; filename=\"filename.jpg\""
pub fn with_content_disposition(mut self, v: String) -> Self {
self.content_disposition = Some(v);
- self.bit |= Metakey::ContentDisposition;
+ self.metakey |= Metakey::ContentDisposition;
self
}
@@ -464,7 +471,7 @@ impl Metadata {
/// - "attachment; filename=\"filename.jpg\""
pub fn set_content_disposition(&mut self, v: &str) -> &mut Self {
self.content_disposition = Some(v.to_string());
- self.bit |= Metakey::ContentDisposition;
+ self.metakey |= Metakey::ContentDisposition;
self
}
@@ -480,7 +487,7 @@ impl Metadata {
/// [`Metakey::Version`], otherwise it will panic.
pub fn version(&self) -> Option<&str> {
debug_assert!(
- self.bit.contains(Metakey::Version) ||
self.bit.contains(Metakey::Complete),
+ self.metakey.contains(Metakey::Version) ||
self.metakey.contains(Metakey::Complete),
"visiting not set metadata: version, maybe a bug"
);
@@ -494,7 +501,7 @@ impl Metadata {
/// This field may come out from the version control system, like object
versioning in AWS S3.
pub fn with_version(mut self, v: String) -> Self {
self.version = Some(v);
- self.bit |= Metakey::Version;
+ self.metakey |= Metakey::Version;
self
}
@@ -505,7 +512,7 @@ impl Metadata {
/// This field may come out from the version control system, like object
versioning in AWS S3.
pub fn set_version(&mut self, v: &str) -> &mut Self {
self.version = Some(v.to_string());
- self.bit |= Metakey::Version;
+ self.metakey |= Metakey::Version;
self
}
}