This is an automated email from the ASF dual-hosted git repository. xuanwo pushed a commit to branch xuanwo/ctor-service-init in repository https://gitbox.apache.org/repos/asf/opendal.git
commit f3dfc01055466889e033ee10279ab20a92f706fd Author: Xuanwo <[email protected]> AuthorDate: Thu Dec 4 19:37:28 2025 +0800 refactor: Register service at build time instead Signed-off-by: Xuanwo <[email protected]> --- core/Cargo.lock | 32 ++++++ core/core/Cargo.toml | 1 + core/core/src/docs/rfcs/6828_core.md | 2 +- core/core/src/services/aliyun_drive/mod.rs | 7 ++ core/core/src/services/alluxio/mod.rs | 7 ++ core/core/src/services/azblob/mod.rs | 7 ++ core/core/src/services/azdls/mod.rs | 7 ++ core/core/src/services/azfile/mod.rs | 7 ++ core/core/src/services/b2/mod.rs | 7 ++ core/core/src/services/cacache/mod.rs | 7 ++ core/core/src/services/cloudflare_kv/mod.rs | 7 ++ core/core/src/services/compfs/mod.rs | 7 ++ core/core/src/services/cos/mod.rs | 7 ++ core/core/src/services/d1/mod.rs | 7 ++ core/core/src/services/dashmap/mod.rs | 7 ++ core/core/src/services/dbfs/mod.rs | 7 ++ core/core/src/services/dropbox/mod.rs | 7 ++ core/core/src/services/etcd/mod.rs | 7 ++ core/core/src/services/foundationdb/mod.rs | 7 ++ core/core/src/services/fs/mod.rs | 7 ++ core/core/src/services/ftp/mod.rs | 7 ++ core/core/src/services/gcs/mod.rs | 7 ++ core/core/src/services/gdrive/mod.rs | 7 ++ core/core/src/services/ghac/mod.rs | 7 ++ core/core/src/services/github/mod.rs | 7 ++ core/core/src/services/gridfs/mod.rs | 7 ++ core/core/src/services/hdfs/mod.rs | 7 ++ core/core/src/services/hdfs_native/mod.rs | 7 ++ core/core/src/services/http/mod.rs | 7 ++ core/core/src/services/huggingface/mod.rs | 7 ++ core/core/src/services/ipfs/mod.rs | 7 ++ core/core/src/services/ipmfs/mod.rs | 7 ++ core/core/src/services/koofr/mod.rs | 7 ++ core/core/src/services/lakefs/mod.rs | 7 ++ core/core/src/services/memcached/mod.rs | 7 ++ core/core/src/services/memory/mod.rs | 7 ++ core/core/src/services/mini_moka/mod.rs | 7 ++ core/core/src/services/moka/mod.rs | 7 ++ core/core/src/services/mongodb/mod.rs | 7 ++ core/core/src/services/monoiofs/mod.rs | 7 ++ core/core/src/services/mysql/mod.rs | 7 ++ core/core/src/services/obs/mod.rs | 7 ++ core/core/src/services/onedrive/mod.rs | 7 ++ core/core/src/services/oss/mod.rs | 7 ++ core/core/src/services/pcloud/mod.rs | 7 ++ core/core/src/services/persy/mod.rs | 7 ++ core/core/src/services/postgresql/mod.rs | 7 ++ core/core/src/services/redb/mod.rs | 7 ++ core/core/src/services/redis/mod.rs | 7 ++ core/core/src/services/rocksdb/mod.rs | 7 ++ core/core/src/services/s3/mod.rs | 7 ++ core/core/src/services/seafile/mod.rs | 7 ++ core/core/src/services/sftp/mod.rs | 7 ++ core/core/src/services/sled/mod.rs | 7 ++ core/core/src/services/sqlite/mod.rs | 7 ++ core/core/src/services/surrealdb/mod.rs | 7 ++ core/core/src/services/swift/mod.rs | 7 ++ core/core/src/services/tikv/mod.rs | 7 ++ core/core/src/services/upyun/mod.rs | 7 ++ core/core/src/services/vercel_artifacts/mod.rs | 7 ++ core/core/src/services/vercel_blob/mod.rs | 7 ++ core/core/src/services/webdav/mod.rs | 7 ++ core/core/src/services/webhdfs/mod.rs | 7 ++ core/core/src/services/yandex_disk/mod.rs | 7 ++ core/core/src/types/operator/registry.rs | 132 +------------------------ 65 files changed, 463 insertions(+), 131 deletions(-) diff --git a/core/Cargo.lock b/core/Cargo.lock index 8993b5829..9c7b5927e 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -2223,6 +2223,22 @@ dependencies = [ "syn 2.0.110", ] +[[package]] +name = "ctor" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb230974aaf0aca4d71665bed0aca156cf43b764fcb9583b69c6c3e686f35e72" +dependencies = [ + "ctor-proc-macro", + "dtor", +] + +[[package]] +name = "ctor-proc-macro" +version = "0.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52560adf09603e58c9a7ee1fe1dcb95a16927b17c127f0ac02d6e768a0e25bc1" + [[package]] name = "ctr" version = "0.9.2" @@ -2607,6 +2623,21 @@ dependencies = [ "dtoa", ] +[[package]] +name = "dtor" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "404d02eeb088a82cfd873006cb713fe411306c7d182c344905e101fb1167d301" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f678cf4a922c215c63e0de95eb1ff08a958a81d47e485cf9da1e27bf6305cfa5" + [[package]] name = "dunce" version = "1.0.5" @@ -5429,6 +5460,7 @@ dependencies = [ "compio", "crc32c", "criterion", + "ctor", "dashmap 6.1.0", "divan", "dotenvy", diff --git a/core/core/Cargo.toml b/core/core/Cargo.toml index 666962a1d..9210f0ce1 100644 --- a/core/core/Cargo.toml +++ b/core/core/Cargo.toml @@ -232,6 +232,7 @@ jiff = { version = "0.2.15", features = ["serde"] } log = "0.4" md-5 = "0.10" mea = { version = "0.5.1" } +ctor = "0.6.2" percent-encoding = "2" quick-xml = { version = "0.38", features = ["serialize", "overlapped-lists"] } reqwest = { version = "0.12.24", features = [ diff --git a/core/core/src/docs/rfcs/6828_core.md b/core/core/src/docs/rfcs/6828_core.md index 0276dd515..2ef54a627 100644 --- a/core/core/src/docs/rfcs/6828_core.md +++ b/core/core/src/docs/rfcs/6828_core.md @@ -50,7 +50,7 @@ opendal = { version = "0.56", features = ["service-s3", "layer-logging"] } - `opendal` facade - Depends on `opendal-core` (mandatory), `opendal-layer-*` and `opendal-service-*` as optional deps behind features. - Re-exports `core::{Operator, Result, ...}`, critical layers, and optional services/layers. - - On build, calls `register_builtin_services` that invokes each enabled service crate’s `register` function to populate `DEFAULT_OPERATOR_REGISTRY`. + - On build, each enabled service self-registers via a `ctor` initializer to populate `DEFAULT_OPERATOR_REGISTRY`. - Maintains feature aliases for one major version (e.g., `services-s3` -> `service-s3`, `layers-logging` -> `layer-logging`). ## Feature matrix diff --git a/core/core/src/services/aliyun_drive/mod.rs b/core/core/src/services/aliyun_drive/mod.rs index 7cc6a5d9b..e7c54d0a2 100644 --- a/core/core/src/services/aliyun_drive/mod.rs +++ b/core/core/src/services/aliyun_drive/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for aliyun-drive service. pub const ALIYUN_DRIVE_SCHEME: &str = "aliyun-drive"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::AliyunDriveBuilder as AliyunDrive; pub use config::AliyunDriveConfig; + +#[ctor::ctor] +fn register_aliyundrive_service() { + DEFAULT_OPERATOR_REGISTRY.register::<AliyunDrive>(ALIYUN_DRIVE_SCHEME); +} diff --git a/core/core/src/services/alluxio/mod.rs b/core/core/src/services/alluxio/mod.rs index 6fa29ade2..8b420ee98 100644 --- a/core/core/src/services/alluxio/mod.rs +++ b/core/core/src/services/alluxio/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for alluxio service. pub const ALLUXIO_SCHEME: &str = "alluxio"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::AlluxioBuilder as Alluxio; pub use config::AlluxioConfig; + +#[ctor::ctor] +fn register_alluxio_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Alluxio>(ALLUXIO_SCHEME); +} diff --git a/core/core/src/services/azblob/mod.rs b/core/core/src/services/azblob/mod.rs index d4c630c89..75a1d7211 100644 --- a/core/core/src/services/azblob/mod.rs +++ b/core/core/src/services/azblob/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for azblob service. pub const AZBLOB_SCHEME: &str = "azblob"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; pub(crate) mod core; @@ -28,3 +30,8 @@ pub(crate) mod writer; pub use backend::AzblobBuilder as Azblob; pub use config::AzblobConfig; + +#[ctor::ctor] +fn register_azblob_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Azblob>(AZBLOB_SCHEME); +} diff --git a/core/core/src/services/azdls/mod.rs b/core/core/src/services/azdls/mod.rs index 90dc9ab68..7a75dae09 100644 --- a/core/core/src/services/azdls/mod.rs +++ b/core/core/src/services/azdls/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for azdls service. pub const AZDLS_SCHEME: &str = "azdls"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::AzdlsBuilder as Azdls; pub use config::AzdlsConfig; + +#[ctor::ctor] +fn register_azdls_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Azdls>(AZDLS_SCHEME); +} diff --git a/core/core/src/services/azfile/mod.rs b/core/core/src/services/azfile/mod.rs index 971b9103e..c659719f8 100644 --- a/core/core/src/services/azfile/mod.rs +++ b/core/core/src/services/azfile/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for azfile service. pub const AZFILE_SCHEME: &str = "azfile"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::AzfileBuilder as Azfile; pub use config::AzfileConfig; + +#[ctor::ctor] +fn register_azfile_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Azfile>(AZFILE_SCHEME); +} diff --git a/core/core/src/services/b2/mod.rs b/core/core/src/services/b2/mod.rs index 7cd38bc92..09436541e 100644 --- a/core/core/src/services/b2/mod.rs +++ b/core/core/src/services/b2/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for b2 service. pub const B2_SCHEME: &str = "b2"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::B2Builder as B2; pub use config::B2Config; + +#[ctor::ctor] +fn register_b2_service() { + DEFAULT_OPERATOR_REGISTRY.register::<B2>(B2_SCHEME); +} diff --git a/core/core/src/services/cacache/mod.rs b/core/core/src/services/cacache/mod.rs index f699c57f7..236836a2b 100644 --- a/core/core/src/services/cacache/mod.rs +++ b/core/core/src/services/cacache/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for cacache service. pub const CACACHE_SCHEME: &str = "cacache"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::CacacheBuilder as Cacache; pub use config::CacacheConfig; + +#[ctor::ctor] +fn register_cacache_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Cacache>(CACACHE_SCHEME); +} diff --git a/core/core/src/services/cloudflare_kv/mod.rs b/core/core/src/services/cloudflare_kv/mod.rs index da5ed5b25..5f5d7ae1f 100644 --- a/core/core/src/services/cloudflare_kv/mod.rs +++ b/core/core/src/services/cloudflare_kv/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for cloudflare-kv service. pub const CLOUDFLARE_KV_SCHEME: &str = "cloudflare-kv"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::CloudflareKvBuilder as CloudflareKv; pub use config::CloudflareKvConfig; + +#[ctor::ctor] +fn register_cloudflarekv_service() { + DEFAULT_OPERATOR_REGISTRY.register::<CloudflareKv>(CLOUDFLARE_KV_SCHEME); +} diff --git a/core/core/src/services/compfs/mod.rs b/core/core/src/services/compfs/mod.rs index 00c909c78..5f51aa2ed 100644 --- a/core/core/src/services/compfs/mod.rs +++ b/core/core/src/services/compfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for compfs service. pub const COMPFS_SCHEME: &str = "compfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::CompfsBuilder as Compfs; pub use config::CompfsConfig; + +#[ctor::ctor] +fn register_compfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Compfs>(COMPFS_SCHEME); +} diff --git a/core/core/src/services/cos/mod.rs b/core/core/src/services/cos/mod.rs index d4c22e003..f2d4ca515 100644 --- a/core/core/src/services/cos/mod.rs +++ b/core/core/src/services/cos/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for cos service. pub const COS_SCHEME: &str = "cos"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::CosBuilder as Cos; pub use config::CosConfig; + +#[ctor::ctor] +fn register_cos_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Cos>(COS_SCHEME); +} diff --git a/core/core/src/services/d1/mod.rs b/core/core/src/services/d1/mod.rs index 6d275db5b..d773e8f86 100644 --- a/core/core/src/services/d1/mod.rs +++ b/core/core/src/services/d1/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for d1 service. pub const D1_SCHEME: &str = "d1"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::D1Builder as D1; pub use config::D1Config; + +#[ctor::ctor] +fn register_d1_service() { + DEFAULT_OPERATOR_REGISTRY.register::<D1>(D1_SCHEME); +} diff --git a/core/core/src/services/dashmap/mod.rs b/core/core/src/services/dashmap/mod.rs index 1357e67ff..eff210847 100644 --- a/core/core/src/services/dashmap/mod.rs +++ b/core/core/src/services/dashmap/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for dashmap service. pub const DASHMAP_SCHEME: &str = "dashmap"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::DashmapBuilder as Dashmap; pub use config::DashmapConfig; + +#[ctor::ctor] +fn register_dashmap_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Dashmap>(DASHMAP_SCHEME); +} diff --git a/core/core/src/services/dbfs/mod.rs b/core/core/src/services/dbfs/mod.rs index c09175cb2..0b7c23d77 100644 --- a/core/core/src/services/dbfs/mod.rs +++ b/core/core/src/services/dbfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for dbfs service. pub const DBFS_SCHEME: &str = "dbfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::DbfsBuilder as Dbfs; pub use config::DbfsConfig; + +#[ctor::ctor] +fn register_dbfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Dbfs>(DBFS_SCHEME); +} diff --git a/core/core/src/services/dropbox/mod.rs b/core/core/src/services/dropbox/mod.rs index 7efc88d97..3195bf5e5 100644 --- a/core/core/src/services/dropbox/mod.rs +++ b/core/core/src/services/dropbox/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for dropbox service. pub const DROPBOX_SCHEME: &str = "dropbox"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod builder; mod config; @@ -29,3 +31,8 @@ mod writer; pub use builder::DropboxBuilder as Dropbox; pub use config::DropboxConfig; + +#[ctor::ctor] +fn register_dropbox_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Dropbox>(DROPBOX_SCHEME); +} diff --git a/core/core/src/services/etcd/mod.rs b/core/core/src/services/etcd/mod.rs index cb0837db6..a28e5fdca 100644 --- a/core/core/src/services/etcd/mod.rs +++ b/core/core/src/services/etcd/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for etcd service. pub const ETCD_SCHEME: &str = "etcd"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::EtcdBuilder as Etcd; pub use config::EtcdConfig; + +#[ctor::ctor] +fn register_etcd_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Etcd>(ETCD_SCHEME); +} diff --git a/core/core/src/services/foundationdb/mod.rs b/core/core/src/services/foundationdb/mod.rs index 7d29dd776..cf67f3f0b 100644 --- a/core/core/src/services/foundationdb/mod.rs +++ b/core/core/src/services/foundationdb/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for foundationdb service. pub const FOUNDATIONDB_SCHEME: &str = "foundationdb"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::FoundationdbBuilder as Foundationdb; pub use config::FoundationdbConfig; + +#[ctor::ctor] +fn register_foundationdb_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Foundationdb>(FOUNDATIONDB_SCHEME); +} diff --git a/core/core/src/services/fs/mod.rs b/core/core/src/services/fs/mod.rs index b463d11df..96b064718 100644 --- a/core/core/src/services/fs/mod.rs +++ b/core/core/src/services/fs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for fs service. pub const FS_SCHEME: &str = "fs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::FsBuilder as Fs; pub use config::FsConfig; + +#[ctor::ctor] +fn register_fs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Fs>(FS_SCHEME); +} diff --git a/core/core/src/services/ftp/mod.rs b/core/core/src/services/ftp/mod.rs index 9d8047b0c..cead8f392 100644 --- a/core/core/src/services/ftp/mod.rs +++ b/core/core/src/services/ftp/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for ftp service. pub const FTP_SCHEME: &str = "ftp"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::FtpBuilder as Ftp; pub use config::FtpConfig; + +#[ctor::ctor] +fn register_ftp_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Ftp>(FTP_SCHEME); +} diff --git a/core/core/src/services/gcs/mod.rs b/core/core/src/services/gcs/mod.rs index ccdf38253..437e9aa14 100644 --- a/core/core/src/services/gcs/mod.rs +++ b/core/core/src/services/gcs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for gcs service. pub const GCS_SCHEME: &str = "gcs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::GcsBuilder as Gcs; pub use config::GcsConfig; + +#[ctor::ctor] +fn register_gcs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Gcs>(GCS_SCHEME); +} diff --git a/core/core/src/services/gdrive/mod.rs b/core/core/src/services/gdrive/mod.rs index 11d4cb609..25d6f1aed 100644 --- a/core/core/src/services/gdrive/mod.rs +++ b/core/core/src/services/gdrive/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for gdrive service. pub const GDRIVE_SCHEME: &str = "gdrive"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod builder; mod config; @@ -29,3 +31,8 @@ mod writer; pub use builder::GdriveBuilder as Gdrive; pub use config::GdriveConfig; + +#[ctor::ctor] +fn register_gdrive_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Gdrive>(GDRIVE_SCHEME); +} diff --git a/core/core/src/services/ghac/mod.rs b/core/core/src/services/ghac/mod.rs index f7e65f313..c35782850 100644 --- a/core/core/src/services/ghac/mod.rs +++ b/core/core/src/services/ghac/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for ghac service. pub const GHAC_SCHEME: &str = "ghac"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::GhacBuilder as Ghac; pub use config::GhacConfig; + +#[ctor::ctor] +fn register_ghac_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Ghac>(GHAC_SCHEME); +} diff --git a/core/core/src/services/github/mod.rs b/core/core/src/services/github/mod.rs index 4852744f0..9cb8c0abd 100644 --- a/core/core/src/services/github/mod.rs +++ b/core/core/src/services/github/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for github service. pub const GITHUB_SCHEME: &str = "github"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::GithubBuilder as Github; pub use config::GithubConfig; + +#[ctor::ctor] +fn register_github_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Github>(GITHUB_SCHEME); +} diff --git a/core/core/src/services/gridfs/mod.rs b/core/core/src/services/gridfs/mod.rs index e969369ae..93d4fe611 100644 --- a/core/core/src/services/gridfs/mod.rs +++ b/core/core/src/services/gridfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for gridfs service. pub const GRIDFS_SCHEME: &str = "gridfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::GridfsBuilder as Gridfs; pub use config::GridfsConfig; + +#[ctor::ctor] +fn register_gridfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Gridfs>(GRIDFS_SCHEME); +} diff --git a/core/core/src/services/hdfs/mod.rs b/core/core/src/services/hdfs/mod.rs index 7b0f5fd85..de2c0e349 100644 --- a/core/core/src/services/hdfs/mod.rs +++ b/core/core/src/services/hdfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for hdfs service. pub const HDFS_SCHEME: &str = "hdfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::HdfsBuilder as Hdfs; pub use config::HdfsConfig; + +#[ctor::ctor] +fn register_hdfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Hdfs>(HDFS_SCHEME); +} diff --git a/core/core/src/services/hdfs_native/mod.rs b/core/core/src/services/hdfs_native/mod.rs index 81f33cda7..6ff307f5a 100644 --- a/core/core/src/services/hdfs_native/mod.rs +++ b/core/core/src/services/hdfs_native/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for hdfs-native service. pub const HDFS_NATIVE_SCHEME: &str = "hdfs-native"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::HdfsNativeBuilder as HdfsNative; pub use config::HdfsNativeConfig; + +#[ctor::ctor] +fn register_hdfsnative_service() { + DEFAULT_OPERATOR_REGISTRY.register::<HdfsNative>(HDFS_NATIVE_SCHEME); +} diff --git a/core/core/src/services/http/mod.rs b/core/core/src/services/http/mod.rs index af2440287..5b3975d7b 100644 --- a/core/core/src/services/http/mod.rs +++ b/core/core/src/services/http/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for http service. pub const HTTP_SCHEME: &str = "http"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -25,3 +27,8 @@ mod error; pub use backend::HttpBuilder as Http; pub use config::HttpConfig; + +#[ctor::ctor] +fn register_http_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Http>(HTTP_SCHEME); +} diff --git a/core/core/src/services/huggingface/mod.rs b/core/core/src/services/huggingface/mod.rs index 68b9d09a3..3576c2216 100644 --- a/core/core/src/services/huggingface/mod.rs +++ b/core/core/src/services/huggingface/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for huggingface service. pub const HUGGINGFACE_SCHEME: &str = "huggingface"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod lister; pub use backend::HuggingfaceBuilder as Huggingface; pub use config::HuggingfaceConfig; + +#[ctor::ctor] +fn register_huggingface_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Huggingface>(HUGGINGFACE_SCHEME); +} diff --git a/core/core/src/services/ipfs/mod.rs b/core/core/src/services/ipfs/mod.rs index 71c48b8bd..59e68e5f9 100644 --- a/core/core/src/services/ipfs/mod.rs +++ b/core/core/src/services/ipfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for ipfs service. pub const IPFS_SCHEME: &str = "ipfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod ipld; pub use backend::IpfsBuilder as Ipfs; pub use config::IpfsConfig; + +#[ctor::ctor] +fn register_ipfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Ipfs>(IPFS_SCHEME); +} diff --git a/core/core/src/services/ipmfs/mod.rs b/core/core/src/services/ipmfs/mod.rs index b1ae29161..58f92b507 100644 --- a/core/core/src/services/ipmfs/mod.rs +++ b/core/core/src/services/ipmfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for ipmfs service. pub const IPMFS_SCHEME: &str = "ipmfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod builder; mod config; @@ -29,3 +31,8 @@ mod writer; pub use builder::IpmfsBuilder as Ipmfs; pub use config::IpmfsConfig; + +#[ctor::ctor] +fn register_ipmfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Ipmfs>(IPMFS_SCHEME); +} diff --git a/core/core/src/services/koofr/mod.rs b/core/core/src/services/koofr/mod.rs index eabacd782..fe86028e4 100644 --- a/core/core/src/services/koofr/mod.rs +++ b/core/core/src/services/koofr/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for koofr service. pub const KOOFR_SCHEME: &str = "koofr"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::KoofrBuilder as Koofr; pub use config::KoofrConfig; + +#[ctor::ctor] +fn register_koofr_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Koofr>(KOOFR_SCHEME); +} diff --git a/core/core/src/services/lakefs/mod.rs b/core/core/src/services/lakefs/mod.rs index e4cef817c..cc55ed939 100644 --- a/core/core/src/services/lakefs/mod.rs +++ b/core/core/src/services/lakefs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for lakefs service. pub const LAKEFS_SCHEME: &str = "lakefs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::LakefsBuilder as Lakefs; pub use config::LakefsConfig; + +#[ctor::ctor] +fn register_lakefs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Lakefs>(LAKEFS_SCHEME); +} diff --git a/core/core/src/services/memcached/mod.rs b/core/core/src/services/memcached/mod.rs index 7bd879b7f..c10fef6a0 100644 --- a/core/core/src/services/memcached/mod.rs +++ b/core/core/src/services/memcached/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for memcached service. pub const MEMCACHED_SCHEME: &str = "memcached"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod binary; mod config; @@ -27,3 +29,8 @@ mod writer; pub use backend::MemcachedBuilder as Memcached; pub use config::MemcachedConfig; + +#[ctor::ctor] +fn register_memcached_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Memcached>(MEMCACHED_SCHEME); +} diff --git a/core/core/src/services/memory/mod.rs b/core/core/src/services/memory/mod.rs index 71af2d39d..80a0bf3da 100644 --- a/core/core/src/services/memory/mod.rs +++ b/core/core/src/services/memory/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for memory service. pub const MEMORY_SCHEME: &str = "memory"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::MemoryBuilder as Memory; pub use config::MemoryConfig; + +#[ctor::ctor] +fn register_memory_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Memory>(MEMORY_SCHEME); +} diff --git a/core/core/src/services/mini_moka/mod.rs b/core/core/src/services/mini_moka/mod.rs index 216248185..1df625522 100644 --- a/core/core/src/services/mini_moka/mod.rs +++ b/core/core/src/services/mini_moka/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for mini-moka service. pub const MINI_MOKA_SCHEME: &str = "mini-moka"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::MiniMokaBuilder as MiniMoka; pub use config::MiniMokaConfig; + +#[ctor::ctor] +fn register_minimoka_service() { + DEFAULT_OPERATOR_REGISTRY.register::<MiniMoka>(MINI_MOKA_SCHEME); +} diff --git a/core/core/src/services/moka/mod.rs b/core/core/src/services/moka/mod.rs index ea5bfc216..6d5ca4b64 100644 --- a/core/core/src/services/moka/mod.rs +++ b/core/core/src/services/moka/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for moka service. pub const MOKA_SCHEME: &str = "moka"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ pub use backend::MokaBuilder as Moka; pub use backend::MokaCacheBuilder; pub use config::MokaConfig; pub use core::MokaValue; + +#[ctor::ctor] +fn register_moka_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Moka>(MOKA_SCHEME); +} diff --git a/core/core/src/services/mongodb/mod.rs b/core/core/src/services/mongodb/mod.rs index a2a6b7e7e..e2fc75c48 100644 --- a/core/core/src/services/mongodb/mod.rs +++ b/core/core/src/services/mongodb/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for mongodb service. pub const MONGODB_SCHEME: &str = "mongodb"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::MongodbBuilder as Mongodb; pub use config::MongodbConfig; + +#[ctor::ctor] +fn register_mongodb_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Mongodb>(MONGODB_SCHEME); +} diff --git a/core/core/src/services/monoiofs/mod.rs b/core/core/src/services/monoiofs/mod.rs index 2beaae63d..1915761d2 100644 --- a/core/core/src/services/monoiofs/mod.rs +++ b/core/core/src/services/monoiofs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for monoiofs service. pub const MONOIOFS_SCHEME: &str = "monoiofs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::MonoiofsBuilder as Monoiofs; pub use config::MonoiofsConfig; + +#[ctor::ctor] +fn register_monoiofs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Monoiofs>(MONOIOFS_SCHEME); +} diff --git a/core/core/src/services/mysql/mod.rs b/core/core/src/services/mysql/mod.rs index 5ccf41199..3bd42214e 100644 --- a/core/core/src/services/mysql/mod.rs +++ b/core/core/src/services/mysql/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for mysql service. pub const MYSQL_SCHEME: &str = "mysql"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::MysqlBuilder as Mysql; pub use config::MysqlConfig; + +#[ctor::ctor] +fn register_mysql_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Mysql>(MYSQL_SCHEME); +} diff --git a/core/core/src/services/obs/mod.rs b/core/core/src/services/obs/mod.rs index 417ef04ae..b9be65574 100644 --- a/core/core/src/services/obs/mod.rs +++ b/core/core/src/services/obs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for obs service. pub const OBS_SCHEME: &str = "obs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::ObsBuilder as Obs; pub use config::ObsConfig; + +#[ctor::ctor] +fn register_obs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Obs>(OBS_SCHEME); +} diff --git a/core/core/src/services/onedrive/mod.rs b/core/core/src/services/onedrive/mod.rs index 5f78a0d78..ebf9f189e 100644 --- a/core/core/src/services/onedrive/mod.rs +++ b/core/core/src/services/onedrive/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for onedrive service. pub const ONEDRIVE_SCHEME: &str = "onedrive"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod builder; mod config; @@ -30,3 +32,8 @@ mod writer; pub use builder::OnedriveBuilder as Onedrive; pub use config::OnedriveConfig; + +#[ctor::ctor] +fn register_onedrive_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Onedrive>(ONEDRIVE_SCHEME); +} diff --git a/core/core/src/services/oss/mod.rs b/core/core/src/services/oss/mod.rs index 62d233c1e..cf7055624 100644 --- a/core/core/src/services/oss/mod.rs +++ b/core/core/src/services/oss/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for oss service. pub const OSS_SCHEME: &str = "oss"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::OssBuilder as Oss; pub use config::OssConfig; + +#[ctor::ctor] +fn register_oss_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Oss>(OSS_SCHEME); +} diff --git a/core/core/src/services/pcloud/mod.rs b/core/core/src/services/pcloud/mod.rs index e01002900..3295b09ba 100644 --- a/core/core/src/services/pcloud/mod.rs +++ b/core/core/src/services/pcloud/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for pcloud service. pub const PCLOUD_SCHEME: &str = "pcloud"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::PcloudBuilder as Pcloud; pub use config::PcloudConfig; + +#[ctor::ctor] +fn register_pcloud_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Pcloud>(PCLOUD_SCHEME); +} diff --git a/core/core/src/services/persy/mod.rs b/core/core/src/services/persy/mod.rs index 9ebbf8dfd..1dd724b05 100644 --- a/core/core/src/services/persy/mod.rs +++ b/core/core/src/services/persy/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for persy service. pub const PERSY_SCHEME: &str = "persy"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::PersyBuilder as Persy; pub use config::PersyConfig; + +#[ctor::ctor] +fn register_persy_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Persy>(PERSY_SCHEME); +} diff --git a/core/core/src/services/postgresql/mod.rs b/core/core/src/services/postgresql/mod.rs index ca2fdc086..25863aee0 100644 --- a/core/core/src/services/postgresql/mod.rs +++ b/core/core/src/services/postgresql/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for postgresql service. pub const POSTGRESQL_SCHEME: &str = "postgresql"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::PostgresqlBuilder as Postgresql; pub use config::PostgresqlConfig; + +#[ctor::ctor] +fn register_postgresql_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Postgresql>(POSTGRESQL_SCHEME); +} diff --git a/core/core/src/services/redb/mod.rs b/core/core/src/services/redb/mod.rs index 05b421448..3d653a1e6 100644 --- a/core/core/src/services/redb/mod.rs +++ b/core/core/src/services/redb/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for redb service. pub const REDB_SCHEME: &str = "redb"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::RedbBuilder as Redb; pub use config::RedbConfig; + +#[ctor::ctor] +fn register_redb_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Redb>(REDB_SCHEME); +} diff --git a/core/core/src/services/redis/mod.rs b/core/core/src/services/redis/mod.rs index d0610f508..6d0563bcc 100644 --- a/core/core/src/services/redis/mod.rs +++ b/core/core/src/services/redis/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for redis service. pub const REDIS_SCHEME: &str = "redis"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::RedisBuilder as Redis; pub use config::RedisConfig; + +#[ctor::ctor] +fn register_redis_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Redis>(REDIS_SCHEME); +} diff --git a/core/core/src/services/rocksdb/mod.rs b/core/core/src/services/rocksdb/mod.rs index a4788f093..4447dc778 100644 --- a/core/core/src/services/rocksdb/mod.rs +++ b/core/core/src/services/rocksdb/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for rocksdb service. pub const ROCKSDB_SCHEME: &str = "rocksdb"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::RocksdbBuilder as Rocksdb; pub use config::RocksdbConfig; + +#[ctor::ctor] +fn register_rocksdb_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Rocksdb>(ROCKSDB_SCHEME); +} diff --git a/core/core/src/services/s3/mod.rs b/core/core/src/services/s3/mod.rs index 5c8bb617b..432f8f45e 100644 --- a/core/core/src/services/s3/mod.rs +++ b/core/core/src/services/s3/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for s3 service. pub const S3_SCHEME: &str = "s3"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::S3Builder as S3; pub use config::S3Config; + +#[ctor::ctor] +fn register_s3_service() { + DEFAULT_OPERATOR_REGISTRY.register::<S3>(S3_SCHEME); +} diff --git a/core/core/src/services/seafile/mod.rs b/core/core/src/services/seafile/mod.rs index d658fff41..94abafc0b 100644 --- a/core/core/src/services/seafile/mod.rs +++ b/core/core/src/services/seafile/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for seafile service. pub const SEAFILE_SCHEME: &str = "seafile"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::SeafileBuilder as Seafile; pub use config::SeafileConfig; + +#[ctor::ctor] +fn register_seafile_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Seafile>(SEAFILE_SCHEME); +} diff --git a/core/core/src/services/sftp/mod.rs b/core/core/src/services/sftp/mod.rs index cb608983d..5712c4bdc 100644 --- a/core/core/src/services/sftp/mod.rs +++ b/core/core/src/services/sftp/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for sftp service. pub const SFTP_SCHEME: &str = "sftp"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -30,3 +32,8 @@ mod writer; pub use backend::SftpBuilder as Sftp; pub use config::SftpConfig; + +#[ctor::ctor] +fn register_sftp_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Sftp>(SFTP_SCHEME); +} diff --git a/core/core/src/services/sled/mod.rs b/core/core/src/services/sled/mod.rs index 70f043b0e..915fa9de3 100644 --- a/core/core/src/services/sled/mod.rs +++ b/core/core/src/services/sled/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for sled service. pub const SLED_SCHEME: &str = "sled"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -27,3 +29,8 @@ mod writer; pub use backend::SledBuilder as Sled; pub use config::SledConfig; + +#[ctor::ctor] +fn register_sled_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Sled>(SLED_SCHEME); +} diff --git a/core/core/src/services/sqlite/mod.rs b/core/core/src/services/sqlite/mod.rs index c498866e4..c6783d57f 100644 --- a/core/core/src/services/sqlite/mod.rs +++ b/core/core/src/services/sqlite/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for sqlite service. pub const SQLITE_SCHEME: &str = "sqlite"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::SqliteBuilder as Sqlite; pub use config::SqliteConfig; + +#[ctor::ctor] +fn register_sqlite_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Sqlite>(SQLITE_SCHEME); +} diff --git a/core/core/src/services/surrealdb/mod.rs b/core/core/src/services/surrealdb/mod.rs index 94437dda4..722ace1e5 100644 --- a/core/core/src/services/surrealdb/mod.rs +++ b/core/core/src/services/surrealdb/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for surrealdb service. pub const SURREALDB_SCHEME: &str = "surrealdb"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::SurrealdbBuilder as Surrealdb; pub use config::SurrealdbConfig; + +#[ctor::ctor] +fn register_surrealdb_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Surrealdb>(SURREALDB_SCHEME); +} diff --git a/core/core/src/services/swift/mod.rs b/core/core/src/services/swift/mod.rs index 4eff77934..506de54d5 100644 --- a/core/core/src/services/swift/mod.rs +++ b/core/core/src/services/swift/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for swift service. pub const SWIFT_SCHEME: &str = "swift"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::SwiftBuilder as Swift; pub use config::SwiftConfig; + +#[ctor::ctor] +fn register_swift_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Swift>(SWIFT_SCHEME); +} diff --git a/core/core/src/services/tikv/mod.rs b/core/core/src/services/tikv/mod.rs index 639edf7bd..6bd30e843 100644 --- a/core/core/src/services/tikv/mod.rs +++ b/core/core/src/services/tikv/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for tikv service. pub const TIKV_SCHEME: &str = "tikv"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -26,3 +28,8 @@ mod writer; pub use backend::TikvBuilder as Tikv; pub use config::TikvConfig; + +#[ctor::ctor] +fn register_tikv_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Tikv>(TIKV_SCHEME); +} diff --git a/core/core/src/services/upyun/mod.rs b/core/core/src/services/upyun/mod.rs index 9f65e9405..960f2d241 100644 --- a/core/core/src/services/upyun/mod.rs +++ b/core/core/src/services/upyun/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for upyun service. pub const UPYUN_SCHEME: &str = "upyun"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::UpyunBuilder as Upyun; pub use config::UpyunConfig; + +#[ctor::ctor] +fn register_upyun_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Upyun>(UPYUN_SCHEME); +} diff --git a/core/core/src/services/vercel_artifacts/mod.rs b/core/core/src/services/vercel_artifacts/mod.rs index c160d557e..fe3ae58fc 100644 --- a/core/core/src/services/vercel_artifacts/mod.rs +++ b/core/core/src/services/vercel_artifacts/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for vercel-artifacts service. pub const VERCEL_ARTIFACTS_SCHEME: &str = "vercel-artifacts"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod builder; mod config; @@ -27,3 +29,8 @@ mod writer; pub use builder::VercelArtifactsBuilder as VercelArtifacts; pub use config::VercelArtifactsConfig; + +#[ctor::ctor] +fn register_vercelartifacts_service() { + DEFAULT_OPERATOR_REGISTRY.register::<VercelArtifacts>(VERCEL_ARTIFACTS_SCHEME); +} diff --git a/core/core/src/services/vercel_blob/mod.rs b/core/core/src/services/vercel_blob/mod.rs index f989d5bf0..684eab202 100644 --- a/core/core/src/services/vercel_blob/mod.rs +++ b/core/core/src/services/vercel_blob/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for vercel-blob service. pub const VERCEL_BLOB_SCHEME: &str = "vercel-blob"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::VercelBlobBuilder as VercelBlob; pub use config::VercelBlobConfig; + +#[ctor::ctor] +fn register_vercelblob_service() { + DEFAULT_OPERATOR_REGISTRY.register::<VercelBlob>(VERCEL_BLOB_SCHEME); +} diff --git a/core/core/src/services/webdav/mod.rs b/core/core/src/services/webdav/mod.rs index 7e46b570c..1fd1f194e 100644 --- a/core/core/src/services/webdav/mod.rs +++ b/core/core/src/services/webdav/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for webdav service. pub const WEBDAV_SCHEME: &str = "webdav"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::WebdavBuilder as Webdav; pub use config::WebdavConfig; + +#[ctor::ctor] +fn register_webdav_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Webdav>(WEBDAV_SCHEME); +} diff --git a/core/core/src/services/webhdfs/mod.rs b/core/core/src/services/webhdfs/mod.rs index 7e9c47125..7dd99edc8 100644 --- a/core/core/src/services/webhdfs/mod.rs +++ b/core/core/src/services/webhdfs/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for webhdfs service. pub const WEBHDFS_SCHEME: &str = "webhdfs"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -29,3 +31,8 @@ mod writer; pub use backend::WebhdfsBuilder as Webhdfs; pub use config::WebhdfsConfig; + +#[ctor::ctor] +fn register_webhdfs_service() { + DEFAULT_OPERATOR_REGISTRY.register::<Webhdfs>(WEBHDFS_SCHEME); +} diff --git a/core/core/src/services/yandex_disk/mod.rs b/core/core/src/services/yandex_disk/mod.rs index 3c2224bdd..271d2da6d 100644 --- a/core/core/src/services/yandex_disk/mod.rs +++ b/core/core/src/services/yandex_disk/mod.rs @@ -18,6 +18,8 @@ /// Default scheme for yandex-disk service. pub const YANDEX_DISK_SCHEME: &str = "yandex-disk"; +use crate::types::DEFAULT_OPERATOR_REGISTRY; + mod backend; mod config; mod core; @@ -28,3 +30,8 @@ mod writer; pub use backend::YandexDiskBuilder as YandexDisk; pub use config::YandexDiskConfig; + +#[ctor::ctor] +fn register_yandexdisk_service() { + DEFAULT_OPERATOR_REGISTRY.register::<YandexDisk>(YANDEX_DISK_SCHEME); +} diff --git a/core/core/src/types/operator/registry.rs b/core/core/src/types/operator/registry.rs index d4dcf0f2a..8afeee43f 100644 --- a/core/core/src/types/operator/registry.rs +++ b/core/core/src/types/operator/registry.rs @@ -26,11 +26,8 @@ use crate::{Error, ErrorKind, Operator, Result}; pub type OperatorFactory = fn(&OperatorUri) -> Result<Operator>; /// Default registry initialized with builtin services. -pub static DEFAULT_OPERATOR_REGISTRY: LazyLock<OperatorRegistry> = LazyLock::new(|| { - let registry = OperatorRegistry::new(); - register_builtin_services(®istry); - registry -}); +pub static DEFAULT_OPERATOR_REGISTRY: LazyLock<OperatorRegistry> = + LazyLock::new(OperatorRegistry::new); /// Global registry that maps schemes to [`OperatorFactory`] functions. #[derive(Debug, Default)] @@ -76,131 +73,6 @@ impl OperatorRegistry { } } -fn register_builtin_services(registry: &OperatorRegistry) { - #[cfg(feature = "services-aliyun-drive")] - registry.register::<crate::services::AliyunDrive>(crate::services::ALIYUN_DRIVE_SCHEME); - #[cfg(feature = "services-alluxio")] - registry.register::<crate::services::Alluxio>(crate::services::ALLUXIO_SCHEME); - #[cfg(feature = "services-azblob")] - registry.register::<crate::services::Azblob>(crate::services::AZBLOB_SCHEME); - #[cfg(feature = "services-azdls")] - registry.register::<crate::services::Azdls>(crate::services::AZDLS_SCHEME); - #[cfg(feature = "services-azfile")] - registry.register::<crate::services::Azfile>(crate::services::AZFILE_SCHEME); - #[cfg(feature = "services-b2")] - registry.register::<crate::services::B2>(crate::services::B2_SCHEME); - #[cfg(feature = "services-cacache")] - registry.register::<crate::services::Cacache>(crate::services::CACACHE_SCHEME); - #[cfg(feature = "services-cloudflare-kv")] - registry.register::<crate::services::CloudflareKv>(crate::services::CLOUDFLARE_KV_SCHEME); - #[cfg(feature = "services-compfs")] - registry.register::<crate::services::Compfs>(crate::services::COMPFS_SCHEME); - #[cfg(feature = "services-cos")] - registry.register::<crate::services::Cos>(crate::services::COS_SCHEME); - #[cfg(feature = "services-d1")] - registry.register::<crate::services::D1>(crate::services::D1_SCHEME); - #[cfg(feature = "services-dashmap")] - registry.register::<crate::services::Dashmap>(crate::services::DASHMAP_SCHEME); - #[cfg(feature = "services-dbfs")] - registry.register::<crate::services::Dbfs>(crate::services::DBFS_SCHEME); - #[cfg(feature = "services-dropbox")] - registry.register::<crate::services::Dropbox>(crate::services::DROPBOX_SCHEME); - #[cfg(feature = "services-etcd")] - registry.register::<crate::services::Etcd>(crate::services::ETCD_SCHEME); - #[cfg(feature = "services-foundationdb")] - registry.register::<crate::services::Foundationdb>(crate::services::FOUNDATIONDB_SCHEME); - #[cfg(feature = "services-fs")] - registry.register::<crate::services::Fs>(crate::services::FS_SCHEME); - #[cfg(feature = "services-ftp")] - registry.register::<crate::services::Ftp>(crate::services::FTP_SCHEME); - #[cfg(feature = "services-gcs")] - registry.register::<crate::services::Gcs>(crate::services::GCS_SCHEME); - #[cfg(feature = "services-gdrive")] - registry.register::<crate::services::Gdrive>(crate::services::GDRIVE_SCHEME); - #[cfg(feature = "services-ghac")] - registry.register::<crate::services::Ghac>(crate::services::GHAC_SCHEME); - #[cfg(feature = "services-github")] - registry.register::<crate::services::Github>(crate::services::GITHUB_SCHEME); - #[cfg(feature = "services-gridfs")] - registry.register::<crate::services::Gridfs>(crate::services::GRIDFS_SCHEME); - #[cfg(feature = "services-hdfs")] - registry.register::<crate::services::Hdfs>(crate::services::HDFS_SCHEME); - #[cfg(feature = "services-hdfs-native")] - registry.register::<crate::services::HdfsNative>(crate::services::HDFS_NATIVE_SCHEME); - #[cfg(feature = "services-http")] - registry.register::<crate::services::Http>(crate::services::HTTP_SCHEME); - #[cfg(feature = "services-huggingface")] - registry.register::<crate::services::Huggingface>(crate::services::HUGGINGFACE_SCHEME); - #[cfg(feature = "services-ipfs")] - registry.register::<crate::services::Ipfs>(crate::services::IPFS_SCHEME); - #[cfg(feature = "services-ipmfs")] - registry.register::<crate::services::Ipmfs>(crate::services::IPMFS_SCHEME); - #[cfg(feature = "services-koofr")] - registry.register::<crate::services::Koofr>(crate::services::KOOFR_SCHEME); - #[cfg(feature = "services-lakefs")] - registry.register::<crate::services::Lakefs>(crate::services::LAKEFS_SCHEME); - #[cfg(feature = "services-memcached")] - registry.register::<crate::services::Memcached>(crate::services::MEMCACHED_SCHEME); - #[cfg(feature = "services-memory")] - registry.register::<crate::services::Memory>(crate::services::MEMORY_SCHEME); - #[cfg(feature = "services-mini-moka")] - registry.register::<crate::services::MiniMoka>(crate::services::MINI_MOKA_SCHEME); - #[cfg(feature = "services-moka")] - registry.register::<crate::services::Moka>(crate::services::MOKA_SCHEME); - #[cfg(feature = "services-mongodb")] - registry.register::<crate::services::Mongodb>(crate::services::MONGODB_SCHEME); - #[cfg(feature = "services-monoiofs")] - registry.register::<crate::services::Monoiofs>(crate::services::MONOIOFS_SCHEME); - #[cfg(feature = "services-mysql")] - registry.register::<crate::services::Mysql>(crate::services::MYSQL_SCHEME); - #[cfg(feature = "services-obs")] - registry.register::<crate::services::Obs>(crate::services::OBS_SCHEME); - #[cfg(feature = "services-onedrive")] - registry.register::<crate::services::Onedrive>(crate::services::ONEDRIVE_SCHEME); - #[cfg(feature = "services-oss")] - registry.register::<crate::services::Oss>(crate::services::OSS_SCHEME); - #[cfg(feature = "services-pcloud")] - registry.register::<crate::services::Pcloud>(crate::services::PCLOUD_SCHEME); - #[cfg(feature = "services-persy")] - registry.register::<crate::services::Persy>(crate::services::PERSY_SCHEME); - #[cfg(feature = "services-postgresql")] - registry.register::<crate::services::Postgresql>(crate::services::POSTGRESQL_SCHEME); - #[cfg(feature = "services-redb")] - registry.register::<crate::services::Redb>(crate::services::REDB_SCHEME); - #[cfg(feature = "services-redis")] - registry.register::<crate::services::Redis>(crate::services::REDIS_SCHEME); - #[cfg(feature = "services-rocksdb")] - registry.register::<crate::services::Rocksdb>(crate::services::ROCKSDB_SCHEME); - #[cfg(feature = "services-s3")] - registry.register::<crate::services::S3>(crate::services::S3_SCHEME); - #[cfg(feature = "services-seafile")] - registry.register::<crate::services::Seafile>(crate::services::SEAFILE_SCHEME); - #[cfg(feature = "services-sftp")] - registry.register::<crate::services::Sftp>(crate::services::SFTP_SCHEME); - #[cfg(feature = "services-sled")] - registry.register::<crate::services::Sled>(crate::services::SLED_SCHEME); - #[cfg(feature = "services-sqlite")] - registry.register::<crate::services::Sqlite>(crate::services::SQLITE_SCHEME); - #[cfg(feature = "services-surrealdb")] - registry.register::<crate::services::Surrealdb>(crate::services::SURREALDB_SCHEME); - #[cfg(feature = "services-swift")] - registry.register::<crate::services::Swift>(crate::services::SWIFT_SCHEME); - #[cfg(feature = "services-tikv")] - registry.register::<crate::services::Tikv>(crate::services::TIKV_SCHEME); - #[cfg(feature = "services-upyun")] - registry.register::<crate::services::Upyun>(crate::services::UPYUN_SCHEME); - #[cfg(feature = "services-vercel-artifacts")] - registry.register::<crate::services::VercelArtifacts>(crate::services::VERCEL_ARTIFACTS_SCHEME); - #[cfg(feature = "services-vercel-blob")] - registry.register::<crate::services::VercelBlob>(crate::services::VERCEL_BLOB_SCHEME); - #[cfg(feature = "services-webdav")] - registry.register::<crate::services::Webdav>(crate::services::WEBDAV_SCHEME); - #[cfg(feature = "services-webhdfs")] - registry.register::<crate::services::Webhdfs>(crate::services::WEBHDFS_SCHEME); - #[cfg(feature = "services-yandex-disk")] - registry.register::<crate::services::YandexDisk>(crate::services::YANDEX_DISK_SCHEME); -} - /// Factory adapter that builds an operator from a configurator type. fn factory<C: Configurator>(uri: &OperatorUri) -> Result<Operator> { let cfg = C::from_uri(uri)?;
