This is an automated email from the ASF dual-hosted git repository.

nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-rust.git


The following commit(s) were added to refs/heads/main by this push:
     new 74a99f0  feat(io): Align FileStatus with the Java API. (#45)
74a99f0 is described below

commit 74a99f079efbfcdd1ebc4adf7d715d5ddb231efb
Author: WenjunMin <[email protected]>
AuthorDate: Tue Aug 13 11:22:24 2024 +0800

    feat(io): Align FileStatus with the Java API. (#45)
---
 crates/paimon/Cargo.toml        |  4 ++--
 crates/paimon/src/io/file_io.rs | 17 ++++++++++++++---
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/crates/paimon/Cargo.toml b/crates/paimon/Cargo.toml
index a285c2e..9e741fa 100644
--- a/crates/paimon/Cargo.toml
+++ b/crates/paimon/Cargo.toml
@@ -35,5 +35,5 @@ serde_json = "1.0.120"
 serde_with = "3.9.0"
 snafu = "0.8.3"
 typed-builder = "^0.19"
-opendal = "0.48"
-pretty_assertions = "1"
\ No newline at end of file
+opendal = { version = "0.48",features = ["services-fs"] }
+pretty_assertions = "1"
diff --git a/crates/paimon/src/io/file_io.rs b/crates/paimon/src/io/file_io.rs
index 5247b4f..0d31af7 100644
--- a/crates/paimon/src/io/file_io.rs
+++ b/crates/paimon/src/io/file_io.rs
@@ -18,7 +18,9 @@
 use crate::error::*;
 use std::collections::HashMap;
 
-use opendal::services::MemoryConfig;
+use chrono::offset::Utc;
+use chrono::DateTime;
+use opendal::services::Fs;
 use opendal::{Metakey, Operator};
 use snafu::ResultExt;
 
@@ -34,7 +36,7 @@ impl FileIO {
     ///
     /// TODO: Support building Operator from HashMap via options.
     pub fn new(_: HashMap<String, String>) -> Result<Self> {
-        let op = Operator::from_config(MemoryConfig::default())
+        let op = Operator::new(Fs::default().root("/"))
             .context(IoUnexpectedSnafu {
                 message: "Failed to create operator".to_string(),
             })?
@@ -72,6 +74,9 @@ impl FileIO {
 
         Ok(FileStatus {
             size: meta.content_length(),
+            is_dir: meta.is_dir(),
+            last_modified: meta.last_modified(),
+            path: path.to_string(),
         })
     }
 
@@ -84,7 +89,7 @@ impl FileIO {
         let entries = self
             .op
             .list_with(path)
-            .metakey(Metakey::ContentLength)
+            .metakey(Metakey::ContentLength | Metakey::LastModified)
             .await
             .context(IoUnexpectedSnafu {
                 message: "Failed to list file status".to_string(),
@@ -94,6 +99,9 @@ impl FileIO {
             .into_iter()
             .map(|meta| FileStatus {
                 size: meta.metadata().content_length(),
+                is_dir: meta.metadata().is_dir(),
+                last_modified: meta.metadata().last_modified(),
+                path: format!("{}{}", path, meta.name()),
             })
             .collect())
     }
@@ -155,6 +163,9 @@ impl FileIO {
 #[derive(Clone, Debug)]
 pub struct FileStatus {
     pub size: u64,
+    pub is_dir: bool,
+    pub path: String,
+    pub last_modified: Option<DateTime<Utc>>,
 }
 
 /// Input file represents a file that can be read from.

Reply via email to