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

xuanwo pushed a commit to branch xuanwo/remove-scheme-type
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 7476caf07d1b95e4e707f2332cfdee6f788acd7a
Author: Xuanwo <[email protected]>
AuthorDate: Thu Dec 4 18:51:56 2025 +0800

    refactor!: Remove the concept of scheme
    
    Signed-off-by: Xuanwo <[email protected]>
---
 core/core/src/types/mod.rs    |   3 -
 core/core/src/types/scheme.rs | 476 ------------------------------------------
 2 files changed, 479 deletions(-)

diff --git a/core/core/src/types/mod.rs b/core/core/src/types/mod.rs
index 79f8daf36..fb168553f 100644
--- a/core/core/src/types/mod.rs
+++ b/core/core/src/types/mod.rs
@@ -62,9 +62,6 @@ pub use error::Error;
 pub use error::ErrorKind;
 pub use error::Result;
 
-mod scheme;
-pub use scheme::Scheme;
-
 mod capability;
 pub use capability::Capability;
 
diff --git a/core/core/src/types/scheme.rs b/core/core/src/types/scheme.rs
deleted file mode 100644
index 51b1f7cc0..000000000
--- a/core/core/src/types/scheme.rs
+++ /dev/null
@@ -1,476 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-use std::collections::HashSet;
-use std::fmt::Display;
-use std::str::FromStr;
-
-use crate::Error;
-
-/// Services that OpenDAL supports
-///
-/// # Notes
-///
-/// - Scheme is `non_exhaustive`, new variant COULD be added at any time.
-/// - New variant SHOULD be added in alphabet orders,
-/// - Users MUST NOT relay on its order.
-#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Default)]
-#[non_exhaustive]
-pub enum Scheme {
-    /// [aliyun-drive][crate::services::AliyunDrive]: Aliyun Drive services.
-    AliyunDrive,
-    /// [alluxio][crate::services::Alluxio]: Alluxio services.
-    Alluxio,
-    /// [azblob][crate::services::Azblob]: Azure Storage Blob services.
-    Azblob,
-    /// [Azdls][crate::services::Azdls]: Azure Data Lake Storage Gen2.
-    Azdls,
-    /// [azfile][crate::services::Azfile]: Azfile Services
-    Azfile,
-    /// [B2][crate::services::B2]: Backblaze B2 Services.
-    B2,
-    /// [cacache][crate::services::Cacache]: cacache backend support.
-    Cacache,
-    /// [cloudflare-kv][crate::services::CloudflareKv]: Cloudflare KV services.
-    CloudflareKv,
-    /// [Compfs][crate::services::Compfs]: Compio fs Services.
-    Compfs,
-    /// [cos][crate::services::Cos]: Tencent Cloud Object Storage services.
-    Cos,
-    /// [d1][crate::services::D1]: D1 services
-    D1,
-    /// [dashmap][crate::services::Dashmap]: dashmap backend support.
-    Dashmap,
-    /// [dbfs][crate::services::Dbfs]: DBFS backend support.
-    Dbfs,
-    /// [dropbox][crate::services::Dropbox]: Dropbox services.
-    Dropbox,
-    /// [etcd][crate::services::Etcd]: Etcd Services
-    Etcd,
-    /// [foundationdb][crate::services::Foundationdb]: Foundationdb services.
-    Foundationdb,
-    /// [fs][crate::services::Fs]: POSIX-like file system.
-    Fs,
-    /// [ftp][crate::services::Ftp]: FTP backend.
-    Ftp,
-    /// [gcs][crate::services::Gcs]: Google Cloud Storage backend.
-    Gcs,
-    /// [gdrive][crate::services::Gdrive]: GoogleDrive services.
-    Gdrive,
-    /// [ghac][crate::services::Ghac]: GitHub Action Cache services.
-    Ghac,
-    /// [Github Contents][crate::services::Github]: Github contents support.
-    Github,
-    /// [gridfs](crate::services::Gridfs): MongoDB Gridfs Services
-    Gridfs,
-    /// [hdfs][crate::services::Hdfs]: Hadoop Distributed File System.
-    Hdfs,
-    /// [Native HDFS](crate::services::HdfsNative): Hdfs Native service, using 
rust hdfs-native client for hdfs
-    HdfsNative,
-    /// [http][crate::services::Http]: HTTP backend.
-    Http,
-    /// [huggingface][crate::services::Huggingface]: Huggingface services.
-    Huggingface,
-    /// [ipmfs][crate::services::Ipfs]: IPFS HTTP Gateway
-    Ipfs,
-    /// [ipmfs][crate::services::Ipmfs]: IPFS mutable file system
-    Ipmfs,
-    /// [Koofr][crate::services::Koofr]: Koofr Services.
-    Koofr,
-    /// [lakefs](crate::services::Lakefs): LakeFS Services
-    Lakefs,
-    /// [memcached][crate::services::Memcached]: Memcached service support.
-    Memcached,
-    /// [memory][crate::services::Memory]: In memory backend support.
-    #[default]
-    Memory,
-    /// [mini-moka][crate::services::MiniMoka]: Mini Moka backend support.
-    MiniMoka,
-    /// [moka][crate::services::Moka]: moka backend support.
-    Moka,
-    /// [mongodb](crate::services::Mongodb): MongoDB Services
-    Mongodb,
-    /// [monoiofs][crate::services::Monoiofs]: monoio fs services.
-    Monoiofs,
-    /// [mysql][crate::services::Mysql]: Mysql services
-    Mysql,
-    /// [obs][crate::services::Obs]: Huawei Cloud OBS services.
-    Obs,
-    /// [onedrive][crate::services::Onedrive]: Microsoft OneDrive services.
-    Onedrive,
-    /// [oss][crate::services::Oss]: Aliyun Object Storage Services
-    Oss,
-    /// [Pcloud][crate::services::Pcloud]: Pcloud Services.
-    Pcloud,
-    /// [persy][crate::services::Persy]: persy backend support.
-    Persy,
-    /// [postgresql][crate::services::Postgresql]: Postgresql services
-    Postgresql,
-    /// [redb][crate::services::Redb]: Redb Services
-    Redb,
-    /// [redis][crate::services::Redis]: Redis services
-    Redis,
-    /// [rocksdb][crate::services::Rocksdb]: RocksDB services
-    Rocksdb,
-    /// [s3][crate::services::S3]: AWS S3 alike services.
-    S3,
-    /// [Seafile][crate::services::Seafile]: Seafile Services.
-    Seafile,
-    /// [sftp][crate::services::Sftp]: SFTP services
-    Sftp,
-    /// [sled][crate::services::Sled]: Sled services
-    Sled,
-    /// [sqlite][crate::services::Sqlite]: Sqlite services
-    Sqlite,
-    /// [surrealdb](crate::services::Surrealdb): Surrealdb Services
-    Surrealdb,
-    /// [swift][crate::services::Swift]: Swift backend support.
-    Swift,
-    /// [tikv][crate::services::Tikv]: Tikv Services
-    Tikv,
-    /// [Upyun][crate::services::Upyun]: Upyun Services.
-    Upyun,
-    /// [Vercel Artifacts][crate::services::VercelArtifacts]: Vercel Artifacts 
service, as known as Vercel Remote Caching.
-    VercelArtifacts,
-    /// [VercelBlob][crate::services::VercelBlob]: VercelBlob Services.
-    VercelBlob,
-    /// [webdav][crate::services::Webdav]: WebDAV support.
-    Webdav,
-    /// [webhdfs][crate::services::Webhdfs]: WebHDFS RESTful API Services
-    Webhdfs,
-    /// [YandexDisk][crate::services::YandexDisk]: YandexDisk Services.
-    YandexDisk,
-    /// Custom that allow users to implement services outside OpenDAL.
-    ///
-    /// # NOTE
-    ///
-    /// - Custom must not overwrite any existing services name.
-    /// - Custom must be in lower case.
-    Custom(&'static str),
-}
-
-impl Scheme {
-    /// Convert self into static str.
-    pub fn into_static(self) -> &'static str {
-        self.into()
-    }
-
-    /// Get all enabled schemes.
-    ///
-    /// OpenDAL could be compiled with different features, which will enable 
different schemes.
-    /// This function returns all enabled schemes so users can make decisions 
based on it.
-    ///
-    /// # Examples
-    ///
-    /// ```rust,no_run
-    /// use opendal_core::Scheme;
-    ///
-    /// let enabled_schemes = Scheme::enabled();
-    /// if !enabled_schemes.contains(&Scheme::Memory) {
-    ///     panic!("s3 support is not enabled")
-    /// }
-    /// ```
-    pub fn enabled() -> HashSet<Scheme> {
-        HashSet::from([
-            #[cfg(feature = "services-aliyun-drive")]
-            Scheme::AliyunDrive,
-            #[cfg(feature = "services-alluxio")]
-            Scheme::Alluxio,
-            #[cfg(feature = "services-azblob")]
-            Scheme::Azblob,
-            #[cfg(feature = "services-azdls")]
-            Scheme::Azdls,
-            #[cfg(feature = "services-azfile")]
-            Scheme::Azfile,
-            #[cfg(feature = "services-b2")]
-            Scheme::B2,
-            #[cfg(feature = "services-cacache")]
-            Scheme::Cacache,
-            #[cfg(feature = "services-cloudflare-kv")]
-            Scheme::CloudflareKv,
-            #[cfg(feature = "services-compfs")]
-            Scheme::Compfs,
-            #[cfg(feature = "services-cos")]
-            Scheme::Cos,
-            #[cfg(feature = "services-d1")]
-            Scheme::D1,
-            #[cfg(feature = "services-dashmap")]
-            Scheme::Dashmap,
-            #[cfg(feature = "services-dbfs")]
-            Scheme::Dbfs,
-            #[cfg(feature = "services-dropbox")]
-            Scheme::Dropbox,
-            #[cfg(feature = "services-etcd")]
-            Scheme::Etcd,
-            #[cfg(feature = "services-foundationdb")]
-            Scheme::Foundationdb,
-            #[cfg(feature = "services-fs")]
-            Scheme::Fs,
-            #[cfg(feature = "services-ftp")]
-            Scheme::Ftp,
-            #[cfg(feature = "services-gcs")]
-            Scheme::Gcs,
-            #[cfg(feature = "services-gdrive")]
-            Scheme::Gdrive,
-            #[cfg(feature = "services-ghac")]
-            Scheme::Ghac,
-            #[cfg(feature = "services-github")]
-            Scheme::Github,
-            #[cfg(feature = "services-gridfs")]
-            Scheme::Gridfs,
-            #[cfg(feature = "services-hdfs")]
-            Scheme::Hdfs,
-            #[cfg(feature = "services-hdfs-native")]
-            Scheme::HdfsNative,
-            #[cfg(feature = "services-http")]
-            Scheme::Http,
-            #[cfg(feature = "services-huggingface")]
-            Scheme::Huggingface,
-            #[cfg(feature = "services-ipfs")]
-            Scheme::Ipfs,
-            #[cfg(feature = "services-ipmfs")]
-            Scheme::Ipmfs,
-            #[cfg(feature = "services-koofr")]
-            Scheme::Koofr,
-            #[cfg(feature = "services-lakefs")]
-            Scheme::Lakefs,
-            #[cfg(feature = "services-memcached")]
-            Scheme::Memcached,
-            #[cfg(feature = "services-memory")]
-            Scheme::Memory,
-            #[cfg(feature = "services-mini-moka")]
-            Scheme::MiniMoka,
-            #[cfg(feature = "services-moka")]
-            Scheme::Moka,
-            #[cfg(feature = "services-mongodb")]
-            Scheme::Mongodb,
-            #[cfg(feature = "services-monoiofs")]
-            Scheme::Monoiofs,
-            #[cfg(feature = "services-mysql")]
-            Scheme::Mysql,
-            #[cfg(feature = "services-obs")]
-            Scheme::Obs,
-            #[cfg(feature = "services-onedrive")]
-            Scheme::Onedrive,
-            #[cfg(feature = "services-oss")]
-            Scheme::Oss,
-            #[cfg(feature = "services-pcloud")]
-            Scheme::Pcloud,
-            #[cfg(feature = "services-persy")]
-            Scheme::Persy,
-            #[cfg(feature = "services-postgresql")]
-            Scheme::Postgresql,
-            #[cfg(feature = "services-redb")]
-            Scheme::Redb,
-            #[cfg(feature = "services-redis")]
-            Scheme::Redis,
-            #[cfg(feature = "services-rocksdb")]
-            Scheme::Rocksdb,
-            #[cfg(feature = "services-s3")]
-            Scheme::S3,
-            #[cfg(feature = "services-seafile")]
-            Scheme::Seafile,
-            #[cfg(feature = "services-sftp")]
-            Scheme::Sftp,
-            #[cfg(feature = "services-sled")]
-            Scheme::Sled,
-            #[cfg(feature = "services-sqlite")]
-            Scheme::Sqlite,
-            #[cfg(feature = "services-surrealdb")]
-            Scheme::Surrealdb,
-            #[cfg(feature = "services-swift")]
-            Scheme::Swift,
-            #[cfg(feature = "services-tikv")]
-            Scheme::Tikv,
-            #[cfg(feature = "services-upyun")]
-            Scheme::Upyun,
-            #[cfg(feature = "services-vercel-artifacts")]
-            Scheme::VercelArtifacts,
-            #[cfg(feature = "services-vercel-blob")]
-            Scheme::VercelBlob,
-            #[cfg(feature = "services-webdav")]
-            Scheme::Webdav,
-            #[cfg(feature = "services-webhdfs")]
-            Scheme::Webhdfs,
-            #[cfg(feature = "services-yandex-disk")]
-            Scheme::YandexDisk,
-        ])
-    }
-}
-
-impl Display for Scheme {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        f.write_str(self.into_static())
-    }
-}
-
-impl AsRef<str> for Scheme {
-    fn as_ref(&self) -> &str {
-        self.into_static()
-    }
-}
-
-impl FromStr for Scheme {
-    type Err = Error;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        let s = s.to_lowercase();
-        match s.as_str() {
-            "aliyun-drive" | "aliyun_drive" => Ok(Scheme::AliyunDrive),
-            "alluxio" => Ok(Scheme::Alluxio),
-            "azblob" => Ok(Scheme::Azblob),
-            // Notes:
-            //
-            // OpenDAL used to call `azdls` as `azdfs`, we keep it for 
backward compatibility.
-            // And abfs is widely used in hadoop ecosystem, keep it for easy 
to use.
-            "azdls" | "azdfs" | "abfs" => Ok(Scheme::Azdls),
-            "azfile" => Ok(Scheme::Azfile),
-            "b2" => Ok(Scheme::B2),
-            "cacache" => Ok(Scheme::Cacache),
-            "cloudflare-kv" | "cloudflare_kv" => Ok(Scheme::CloudflareKv),
-            "compfs" => Ok(Scheme::Compfs),
-            "cos" => Ok(Scheme::Cos),
-            "d1" => Ok(Scheme::D1),
-            "dashmap" => Ok(Scheme::Dashmap),
-            "dbfs" => Ok(Scheme::Dbfs),
-            "dropbox" => Ok(Scheme::Dropbox),
-            "etcd" => Ok(Scheme::Etcd),
-            "foundationdb" => Ok(Scheme::Foundationdb),
-            "fs" => Ok(Scheme::Fs),
-            "ftp" | "ftps" => Ok(Scheme::Ftp),
-            "gcs" => Ok(Scheme::Gcs),
-            "gdrive" => Ok(Scheme::Gdrive),
-            "ghac" => Ok(Scheme::Ghac),
-            "github" => Ok(Scheme::Github),
-            "gridfs" => Ok(Scheme::Gridfs),
-            "hdfs" => Ok(Scheme::Hdfs),
-            "hdfs-native" | "hdfs_native" => Ok(Scheme::HdfsNative),
-            "http" | "https" => Ok(Scheme::Http),
-            "huggingface" | "hf" => Ok(Scheme::Huggingface),
-            "ipfs" | "ipns" => Ok(Scheme::Ipfs),
-            "ipmfs" => Ok(Scheme::Ipmfs),
-            "koofr" => Ok(Scheme::Koofr),
-            "lakefs" => Ok(Scheme::Lakefs),
-            "memcached" => Ok(Scheme::Memcached),
-            "memory" => Ok(Scheme::Memory),
-            "mini-moka" | "mini_moka" => Ok(Scheme::MiniMoka),
-            "moka" => Ok(Scheme::Moka),
-            "mongodb" => Ok(Scheme::Mongodb),
-            "monoiofs" => Ok(Scheme::Monoiofs),
-            "mysql" => Ok(Scheme::Mysql),
-            "obs" => Ok(Scheme::Obs),
-            "onedrive" => Ok(Scheme::Onedrive),
-            "oss" => Ok(Scheme::Oss),
-            "pcloud" => Ok(Scheme::Pcloud),
-            "persy" => Ok(Scheme::Persy),
-            "postgresql" => Ok(Scheme::Postgresql),
-            "redb" => Ok(Scheme::Redb),
-            "redis" => Ok(Scheme::Redis),
-            "rocksdb" => Ok(Scheme::Rocksdb),
-            "s3" => Ok(Scheme::S3),
-            "seafile" => Ok(Scheme::Seafile),
-            "sftp" => Ok(Scheme::Sftp),
-            "sled" => Ok(Scheme::Sled),
-            "sqlite" => Ok(Scheme::Sqlite),
-            "surrealdb" => Ok(Scheme::Surrealdb),
-            "swift" => Ok(Scheme::Swift),
-            "tikv" => Ok(Scheme::Tikv),
-            "upyun" => Ok(Scheme::Upyun),
-            "vercel-artifacts" | "vercel_artifacts" => 
Ok(Scheme::VercelArtifacts),
-            "vercel-blob" | "vercel_blob" => Ok(Scheme::VercelBlob),
-            "webdav" => Ok(Scheme::Webdav),
-            "webhdfs" => Ok(Scheme::Webhdfs),
-            "yandex-disk" | "yandex_disk" => Ok(Scheme::YandexDisk),
-            _ => Ok(Scheme::Custom(Box::leak(s.into_boxed_str()))),
-        }
-    }
-}
-
-impl From<Scheme> for &'static str {
-    fn from(v: Scheme) -> Self {
-        match v {
-            Scheme::AliyunDrive => "aliyun-drive",
-            Scheme::Alluxio => "alluxio",
-            Scheme::Azblob => "azblob",
-            Scheme::Azdls => "azdls",
-            Scheme::Azfile => "azfile",
-            Scheme::B2 => "b2",
-            Scheme::Cacache => "cacache",
-            Scheme::CloudflareKv => "cloudflare-kv",
-            Scheme::Compfs => "compfs",
-            Scheme::Cos => "cos",
-            Scheme::D1 => "d1",
-            Scheme::Dashmap => "dashmap",
-            Scheme::Dbfs => "dbfs",
-            Scheme::Dropbox => "dropbox",
-            Scheme::Etcd => "etcd",
-            Scheme::Foundationdb => "foundationdb",
-            Scheme::Fs => "fs",
-            Scheme::Ftp => "ftp",
-            Scheme::Gcs => "gcs",
-            Scheme::Gdrive => "gdrive",
-            Scheme::Ghac => "ghac",
-            Scheme::Github => "github",
-            Scheme::Gridfs => "gridfs",
-            Scheme::Hdfs => "hdfs",
-            Scheme::HdfsNative => "hdfs-native",
-            Scheme::Http => "http",
-            Scheme::Huggingface => "huggingface",
-            Scheme::Ipfs => "ipfs",
-            Scheme::Ipmfs => "ipmfs",
-            Scheme::Koofr => "koofr",
-            Scheme::Lakefs => "lakefs",
-            Scheme::Memcached => "memcached",
-            Scheme::Memory => "memory",
-            Scheme::MiniMoka => "mini-moka",
-            Scheme::Moka => "moka",
-            Scheme::Mongodb => "mongodb",
-            Scheme::Monoiofs => "monoiofs",
-            Scheme::Mysql => "mysql",
-            Scheme::Obs => "obs",
-            Scheme::Onedrive => "onedrive",
-            Scheme::Oss => "oss",
-            Scheme::Pcloud => "pcloud",
-            Scheme::Persy => "persy",
-            Scheme::Postgresql => "postgresql",
-            Scheme::Redb => "redb",
-            Scheme::Redis => "redis",
-            Scheme::Rocksdb => "rocksdb",
-            Scheme::S3 => "s3",
-            Scheme::Seafile => "seafile",
-            Scheme::Sftp => "sftp",
-            Scheme::Sled => "sled",
-            Scheme::Sqlite => "sqlite",
-            Scheme::Surrealdb => "surrealdb",
-            Scheme::Swift => "swift",
-            Scheme::Tikv => "tikv",
-            Scheme::Upyun => "upyun",
-            Scheme::VercelArtifacts => "vercel-artifacts",
-            Scheme::VercelBlob => "vercel-blob",
-            Scheme::Webdav => "webdav",
-            Scheme::Webhdfs => "webhdfs",
-            Scheme::YandexDisk => "yandex-disk",
-            Scheme::Custom(v) => v,
-        }
-    }
-}
-
-impl From<Scheme> for String {
-    fn from(v: Scheme) -> Self {
-        v.into_static().to_string()
-    }
-}

Reply via email to