You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opendal.apache.org by xu...@apache.org on 2023/03/21 13:46:37 UTC

[incubator-opendal] branch main updated: feat: make oli support more services (#1717)

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 74bd0bb4 feat: make oli support more services (#1717)
74bd0bb4 is described below

commit 74bd0bb4d31ce80e7516192faf2754b11f8af62f
Author: Jian Zeng <an...@gmail.com>
AuthorDate: Tue Mar 21 21:46:31 2023 +0800

    feat: make oli support more services (#1717)
    
    Signed-off-by: Jian Zeng <an...@gmail.com>
---
 bin/oli/Cargo.toml        | 20 +++++++++++
 bin/oli/src/config/mod.rs | 86 +++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 104 insertions(+), 2 deletions(-)

diff --git a/bin/oli/Cargo.toml b/bin/oli/Cargo.toml
index 14888c18..6cc20ce7 100644
--- a/bin/oli/Cargo.toml
+++ b/bin/oli/Cargo.toml
@@ -27,6 +27,26 @@ name = "oli"
 repository = "https://github.com/apache/incubator-opendal"
 version = "0.30.3"
 
+[features]
+# Enable services dashmap support
+services-dashmap = ["opendal/services-dashmap"]
+# Enable services ftp support
+services-ftp = ["opendal/services-ftp"]
+# Enable services hdfs support
+services-hdfs = ["opendal/services-hdfs"]
+# Enable services ipfs support
+services-ipfs = ["opendal/services-ipfs"]
+# Enable services memcached support
+services-memcached = ["opendal/services-memcached"]
+# Enable services moka support
+services-moka = ["opendal/services-moka"]
+# Enable services redis support
+services-redis = ["opendal/services-redis"]
+# Enable services rocksdb support
+services-rocksdb = ["opendal/services-rocksdb"]
+# Enable services sled support
+services-sled = ["opendal/services-sled"]
+
 [dependencies]
 anyhow = "1"
 clap = { version = "4", features = ["cargo", "string"] }
diff --git a/bin/oli/src/config/mod.rs b/bin/oli/src/config/mod.rs
index ce41ba7e..e35848e6 100644
--- a/bin/oli/src/config/mod.rs
+++ b/bin/oli/src/config/mod.rs
@@ -85,14 +85,96 @@ impl Config {
             .ok_or_else(|| anyhow!("missing 'type' in profile"))?;
         let scheme = Scheme::from_str(svc)?;
         match scheme {
-            Scheme::S3 => Ok((
-                Operator::from_map::<services::S3>(profile.clone())?.finish(),
+            Scheme::Azblob => Ok((
+                Operator::from_map::<services::Azblob>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Azdfs => Ok((
+                Operator::from_map::<services::Azdfs>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-dashmap")]
+            Scheme::Dashmap => Ok((
+                Operator::from_map::<services::Dashmap>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Gcs => Ok((
+                Operator::from_map::<services::Gcs>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Ghac => Ok((
+                Operator::from_map::<services::Ghac>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-hdfs")]
+            Scheme::Hdfs => Ok((
+                Operator::from_map::<services::Hdfs>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Http => Ok((
+                Operator::from_map::<services::Http>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-ftp")]
+            Scheme::Ftp => Ok((
+                Operator::from_map::<services::Ftp>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-ipfs")]
+            Scheme::Ipfs => Ok((
+                Operator::from_map::<services::Ipfs>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Ipmfs => Ok((
+                Operator::from_map::<services::Ipmfs>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-memcached")]
+            Scheme::Memcached => Ok((
+                Operator::from_map::<services::Memcached>(profile.clone())?.finish(),
+                path,
+            )),
+            // ignore the memory backend
+            #[cfg(feature = "services-moka")]
+            Scheme::Moka => Ok((
+                Operator::from_map::<services::Moka>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Obs => Ok((
+                Operator::from_map::<services::Obs>(profile.clone())?.finish(),
                 path,
             )),
             Scheme::Oss => Ok((
                 Operator::from_map::<services::Oss>(profile.clone())?.finish(),
                 path,
             )),
+            #[cfg(feature = "services-redis")]
+            Scheme::Redis => Ok((
+                Operator::from_map::<services::Redis>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-rocksdb")]
+            Scheme::Rocksdb => Ok((
+                Operator::from_map::<services::Rocksdb>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::S3 => Ok((
+                Operator::from_map::<services::S3>(profile.clone())?.finish(),
+                path,
+            )),
+            #[cfg(feature = "services-sled")]
+            Scheme::Sled => Ok((
+                Operator::from_map::<services::Sled>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Webdav => Ok((
+                Operator::from_map::<services::Webdav>(profile.clone())?.finish(),
+                path,
+            )),
+            Scheme::Webhdfs => Ok((
+                Operator::from_map::<services::Webhdfs>(profile.clone())?.finish(),
+                path,
+            )),
             _ => Err(anyhow!("invalid profile")),
         }
     }