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/opendal.git


The following commit(s) were added to refs/heads/main by this push:
     new 5727752aee feat: support root path for moka and mini-moka (#4984)
5727752aee is described below

commit 5727752aeeb2bf18145ba22f79f5657df88d54cd
Author: meteorgan <[email protected]>
AuthorDate: Fri Aug 9 00:05:06 2024 +0800

    feat: support root path for moka and mini-moka (#4984)
---
 core/src/services/dashmap/backend.rs   | 17 +++++++++++++----
 core/src/services/mini_moka/backend.rs | 23 +++++++++++++++++++++--
 core/src/services/moka/backend.rs      | 25 +++++++++++++++++++++++--
 core/src/types/builder.rs              |  2 +-
 4 files changed, 58 insertions(+), 9 deletions(-)

diff --git a/core/src/services/dashmap/backend.rs 
b/core/src/services/dashmap/backend.rs
index ac359ee4c4..9b8bdf55e6 100644
--- a/core/src/services/dashmap/backend.rs
+++ b/core/src/services/dashmap/backend.rs
@@ -50,7 +50,12 @@ pub struct DashmapBuilder {
 impl DashmapBuilder {
     /// Set the root for dashmap.
     pub fn root(mut self, path: &str) -> Self {
-        self.config.root = Some(path.into());
+        self.config.root = if path.is_empty() {
+            None
+        } else {
+            Some(path.to_string())
+        };
+
         self
     }
 }
@@ -60,10 +65,14 @@ impl Builder for DashmapBuilder {
     type Config = DashmapConfig;
 
     fn build(self) -> Result<impl Access> {
-        Ok(DashmapBackend::new(Adapter {
+        let mut backend = DashmapBackend::new(Adapter {
             inner: DashMap::default(),
-        })
-        .with_root(self.config.root.as_deref().unwrap_or_default()))
+        });
+        if let Some(v) = self.config.root {
+            backend = backend.with_root(&v);
+        }
+
+        Ok(backend)
     }
 }
 
diff --git a/core/src/services/mini_moka/backend.rs 
b/core/src/services/mini_moka/backend.rs
index 6373d157f9..e84a82c8f3 100644
--- a/core/src/services/mini_moka/backend.rs
+++ b/core/src/services/mini_moka/backend.rs
@@ -45,6 +45,9 @@ pub struct MiniMokaConfig {
     ///
     /// Refer to 
[`mini-moka::sync::CacheBuilder::time_to_idle`](https://docs.rs/mini-moka/latest/mini_moka/sync/struct.CacheBuilder.html#method.time_to_idle)
     pub time_to_idle: Option<Duration>,
+
+    /// root path of this backend
+    pub root: Option<String>,
 }
 
 impl Configurator for MiniMokaConfig {
@@ -91,6 +94,17 @@ impl MiniMokaBuilder {
         }
         self
     }
+
+    /// Set root path of this backend
+    pub fn root(mut self, path: &str) -> Self {
+        self.config.root = if path.is_empty() {
+            None
+        } else {
+            Some(path.to_string())
+        };
+
+        self
+    }
 }
 
 impl Builder for MiniMokaBuilder {
@@ -114,9 +128,14 @@ impl Builder for MiniMokaBuilder {
         }
 
         debug!("backend build finished: {:?}", &self);
-        Ok(MiniMokaBackend::new(Adapter {
+        let mut backend = MiniMokaBackend::new(Adapter {
             inner: builder.build(),
-        }))
+        });
+        if let Some(v) = self.config.root {
+            backend = backend.with_root(&v);
+        }
+
+        Ok(backend)
     }
 }
 
diff --git a/core/src/services/moka/backend.rs 
b/core/src/services/moka/backend.rs
index 13e8fc7302..1f29fd8bcf 100644
--- a/core/src/services/moka/backend.rs
+++ b/core/src/services/moka/backend.rs
@@ -52,6 +52,9 @@ pub struct MokaConfig {
     ///
     /// Refer to 
[`moka::sync::CacheBuilder::segments`](https://docs.rs/moka/latest/moka/sync/struct.CacheBuilder.html#method.segments)
     pub num_segments: Option<usize>,
+
+    /// root path of this backend
+    pub root: Option<String>,
 }
 
 impl Debug for MokaConfig {
@@ -62,6 +65,7 @@ impl Debug for MokaConfig {
             .field("time_to_live", &self.time_to_live)
             .field("time_to_idle", &self.time_to_idle)
             .field("num_segments", &self.num_segments)
+            .field("root", &self.root)
             .finish_non_exhaustive()
     }
 }
@@ -127,6 +131,17 @@ impl MokaBuilder {
         self.config.num_segments = Some(v);
         self
     }
+
+    /// Set root path of this backend
+    pub fn root(mut self, path: &str) -> Self {
+        self.config.root = if path.is_empty() {
+            None
+        } else {
+            Some(path.to_string())
+        };
+
+        self
+    }
 }
 
 impl Builder for MokaBuilder {
@@ -154,9 +169,15 @@ impl Builder for MokaBuilder {
         }
 
         debug!("backend build finished: {:?}", &self);
-        Ok(MokaBackend::new(Adapter {
+
+        let mut backend = MokaBackend::new(Adapter {
             inner: builder.build(),
-        }))
+        });
+        if let Some(v) = self.config.root {
+            backend = backend.with_root(&v);
+        }
+
+        Ok(backend)
     }
 }
 
diff --git a/core/src/types/builder.rs b/core/src/types/builder.rs
index 287122457c..1beaec42fe 100644
--- a/core/src/types/builder.rs
+++ b/core/src/types/builder.rs
@@ -103,7 +103,7 @@ impl Builder for () {
 /// use std::collections::HashMap;
 ///
 /// use opendal::services::S3Config;
-/// use opendal::{Configurator, Operator};///
+/// use opendal::{Configurator, Operator};
 /// use opendal::raw::HttpClient;
 ///
 /// async fn test() -> Result<()> {

Reply via email to