Skip to content

Commit f1c29c4

Browse files
authored
object: Polish API for Metadata (#80)
Signed-off-by: Xuanwo <[email protected]>
1 parent 07f8ff7 commit f1c29c4

File tree

5 files changed

+25
-14
lines changed

5 files changed

+25
-14
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ OpenDAL is in **alpha** stage and has been early adopted by [databend](https://g
1111
```rust
1212
use anyhow::Result;
1313
use futures::AsyncReadExt;
14+
use futures::StreamExt;
1415
use opendal::services::fs;
16+
use opendal::ObjectMode;
1517
use opendal::Operator;
1618

1719
#[tokio::main]
@@ -38,6 +40,16 @@ async fn main() -> Result<()> {
3840
let meta = o.metadata().await?;
3941
assert_eq!(meta.content_length(), 13);
4042

43+
// List current dir.
44+
let mut obs = op.objects("").map(|o| o.expect("list object"));
45+
while let Some(o) = obs.next().await {
46+
let meta = o.metadata().await?;
47+
if meta.path().contains("test_file") {
48+
let mode = meta.mode();
49+
assert!(mode.contains(ObjectMode::FILE));
50+
}
51+
}
52+
4153
// Delete file.
4254
o.delete().await?;
4355

examples/basic.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ async fn main() -> Result<()> {
4040

4141
// Get file's Metadata
4242
let meta = o.metadata().await?;
43-
assert_eq!(meta.content_length(), Some(13));
43+
assert_eq!(meta.content_length(), 13);
4444

4545
// List current dir.
4646
let mut obs = op.objects("").map(|o| o.expect("list object"));
4747
let mut found = false;
4848
while let Some(o) = obs.next().await {
4949
let meta = o.metadata().await?;
5050
if meta.path().contains("test_file") {
51-
let mode = meta.mode().expect("object mode");
51+
let mode = meta.mode();
5252
assert!(mode.contains(ObjectMode::FILE));
5353

5454
found = true

src/io.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,7 @@ impl AsyncSeek for Reader {
127127
) -> Poll<std::io::Result<u64>> {
128128
if let ReadState::Seeking(future) = &mut self.state {
129129
match ready!(Pin::new(future).poll(cx)) {
130-
Ok(meta) => {
131-
self.total_size = Some(
132-
meta.content_length()
133-
.expect("object doesn't have content length"),
134-
)
135-
}
130+
Ok(meta) => self.total_size = Some(meta.content_length()),
136131
Err(e) => return Poll::Ready(Err(io::Error::from(e))),
137132
}
138133
}

src/object.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,21 @@ impl Metadata {
126126
self
127127
}
128128

129-
pub fn mode(&self) -> Option<ObjectMode> {
130-
self.mode
129+
pub fn mode(&self) -> ObjectMode {
130+
debug_assert!(self.mode.is_some(), "mode must exist");
131+
132+
self.mode.unwrap_or_default()
131133
}
132134

133135
pub(crate) fn set_mode(&mut self, mode: ObjectMode) -> &mut Self {
134136
self.mode = Some(mode);
135137
self
136138
}
137139

138-
pub fn content_length(&self) -> Option<u64> {
139-
self.content_length
140+
pub fn content_length(&self) -> u64 {
141+
debug_assert!(self.content_length.is_some(), "content length must exist");
142+
143+
self.content_length.unwrap_or_default()
140144
}
141145

142146
pub(crate) fn set_content_length(&mut self, content_length: u64) -> &mut Self {

tests/behavior/behavior.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl BehaviorTest {
6767

6868
// Step 3: Stat this file
6969
let meta = self.op.object(&path).metadata().await?;
70-
assert_eq!(meta.content_length().unwrap(), size as u64, "stat file");
70+
assert_eq!(meta.content_length(), size as u64, "stat file");
7171

7272
// Step 4: Read this file's content
7373
// Step 4.1: Read the whole file.
@@ -103,7 +103,7 @@ impl BehaviorTest {
103103
while let Some(o) = obs.next().await {
104104
let meta = o.metadata().await?;
105105
if meta.path() == path {
106-
let mode = meta.mode().expect("object mode");
106+
let mode = meta.mode();
107107
assert!(
108108
mode.contains(ObjectMode::FILE),
109109
"expected: {:?}, actual: {:?}",

0 commit comments

Comments
 (0)