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

tison pushed a commit to branch small-ctor
in repository https://gitbox.apache.org/repos/asf/opendal.git

commit 65d4696848706e5b2b95a80e8498b9451bd006a1
Author: tison <[email protected]>
AuthorDate: Mon Dec 15 11:00:59 2025 +0800

    chore: adopt small_ctor over ctor
    
    Signed-off-by: tison <[email protected]>
---
 core/Cargo.lock                                | 71 ++++++++------------------
 core/Cargo.toml                                |  2 +-
 core/core/Cargo.toml                           |  2 +-
 core/core/src/services/alluxio/mod.rs          |  4 +-
 core/core/src/services/b2/mod.rs               |  4 +-
 core/core/src/services/cacache/mod.rs          |  4 +-
 core/core/src/services/compfs/mod.rs           |  4 +-
 core/core/src/services/cos/mod.rs              |  4 +-
 core/core/src/services/d1/mod.rs               |  4 +-
 core/core/src/services/dashmap/mod.rs          |  4 +-
 core/core/src/services/dbfs/mod.rs             |  4 +-
 core/core/src/services/dropbox/mod.rs          |  4 +-
 core/core/src/services/etcd/mod.rs             |  4 +-
 core/core/src/services/foundationdb/mod.rs     |  4 +-
 core/core/src/services/fs/mod.rs               |  4 +-
 core/core/src/services/gdrive/mod.rs           |  4 +-
 core/core/src/services/github/mod.rs           |  4 +-
 core/core/src/services/gridfs/mod.rs           |  4 +-
 core/core/src/services/hdfs/mod.rs             |  4 +-
 core/core/src/services/http/mod.rs             |  4 +-
 core/core/src/services/huggingface/mod.rs      |  4 +-
 core/core/src/services/ipmfs/mod.rs            |  4 +-
 core/core/src/services/koofr/mod.rs            |  4 +-
 core/core/src/services/lakefs/mod.rs           |  4 +-
 core/core/src/services/memcached/mod.rs        |  4 +-
 core/core/src/services/memory/mod.rs           |  4 +-
 core/core/src/services/mini_moka/mod.rs        |  4 +-
 core/core/src/services/mongodb/mod.rs          |  4 +-
 core/core/src/services/monoiofs/mod.rs         |  4 +-
 core/core/src/services/onedrive/mod.rs         |  4 +-
 core/core/src/services/pcloud/mod.rs           |  4 +-
 core/core/src/services/persy/mod.rs            |  4 +-
 core/core/src/services/redb/mod.rs             |  4 +-
 core/core/src/services/redis/mod.rs            |  4 +-
 core/core/src/services/rocksdb/mod.rs          |  4 +-
 core/core/src/services/seafile/mod.rs          |  4 +-
 core/core/src/services/sftp/mod.rs             |  4 +-
 core/core/src/services/sqlite/mod.rs           |  4 +-
 core/core/src/services/surrealdb/mod.rs        |  4 +-
 core/core/src/services/swift/mod.rs            |  4 +-
 core/core/src/services/upyun/mod.rs            |  4 +-
 core/core/src/services/vercel_artifacts/mod.rs |  4 +-
 core/core/src/services/webdav/mod.rs           |  4 +-
 core/core/src/services/webhdfs/mod.rs          |  4 +-
 core/core/src/services/yandex_disk/mod.rs      |  4 +-
 core/services/aliyun-drive/Cargo.toml          |  2 +-
 core/services/aliyun-drive/src/lib.rs          |  4 +-
 core/services/azblob/Cargo.toml                |  2 +-
 core/services/azblob/src/lib.rs                |  4 +-
 core/services/azdls/Cargo.toml                 |  2 +-
 core/services/azdls/src/lib.rs                 |  4 +-
 core/services/azfile/Cargo.toml                |  2 +-
 core/services/azfile/src/lib.rs                |  4 +-
 core/services/cloudflare-kv/Cargo.toml         |  2 +-
 core/services/cloudflare-kv/src/lib.rs         |  4 +-
 core/services/ftp/Cargo.toml                   |  2 +-
 core/services/ftp/src/lib.rs                   |  4 +-
 core/services/gcs/Cargo.toml                   |  2 +-
 core/services/gcs/src/lib.rs                   |  4 +-
 core/services/ghac/Cargo.toml                  |  2 +-
 core/services/ghac/src/lib.rs                  |  4 +-
 core/services/hdfs-native/Cargo.toml           |  2 +-
 core/services/hdfs-native/src/lib.rs           |  4 +-
 core/services/ipfs/Cargo.toml                  |  2 +-
 core/services/ipfs/src/lib.rs                  |  4 +-
 core/services/moka/Cargo.toml                  |  2 +-
 core/services/moka/src/lib.rs                  |  4 +-
 core/services/mysql/Cargo.toml                 |  2 +-
 core/services/mysql/src/lib.rs                 |  4 +-
 core/services/obs/Cargo.toml                   |  2 +-
 core/services/obs/src/lib.rs                   |  4 +-
 core/services/oss/Cargo.toml                   |  2 +-
 core/services/oss/src/lib.rs                   |  4 +-
 core/services/postgresql/Cargo.toml            |  2 +-
 core/services/postgresql/src/lib.rs            |  4 +-
 core/services/s3/Cargo.toml                    |  2 +-
 core/services/s3/src/lib.rs                    |  4 +-
 core/services/s3/src/mod.rs                    |  4 +-
 core/services/sled/Cargo.toml                  |  2 +-
 core/services/sled/src/lib.rs                  |  4 +-
 core/services/tikv/Cargo.toml                  |  2 +-
 core/services/tikv/src/lib.rs                  |  4 +-
 core/services/vercel-blob/Cargo.toml           |  2 +-
 core/services/vercel-blob/src/lib.rs           |  4 +-
 84 files changed, 165 insertions(+), 196 deletions(-)

diff --git a/core/Cargo.lock b/core/Cargo.lock
index ac3a7bbd8..c326edcd9 100644
--- a/core/Cargo.lock
+++ b/core/Cargo.lock
@@ -2232,22 +2232,6 @@ dependencies = [
  "syn 2.0.111",
 ]
 
-[[package]]
-name = "ctor"
-version = "0.6.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "424e0138278faeb2b401f174ad17e715c829512d74f3d1e81eb43365c2e0590e"
-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"
@@ -2642,21 +2626,6 @@ 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"
@@ -5566,7 +5535,6 @@ dependencies = [
  "cacache",
  "compio",
  "criterion",
- "ctor",
  "dashmap 6.1.0",
  "divan",
  "dotenvy",
@@ -5612,6 +5580,7 @@ dependencies = [
  "sha1",
  "sha2",
  "size",
+ "small_ctor",
  "sqlx",
  "surrealdb",
  "tokio",
@@ -5809,13 +5778,13 @@ name = "opendal-service-aliyun-drive"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "mea",
  "opendal-core",
  "serde",
  "serde_json",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5824,7 +5793,6 @@ version = "0.55.0"
 dependencies = [
  "base64 0.22.1",
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
@@ -5835,6 +5803,7 @@ dependencies = [
  "serde",
  "serde_json",
  "sha2",
+ "small_ctor",
  "uuid",
 ]
 
@@ -5843,7 +5812,6 @@ name = "opendal-service-azdls"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
@@ -5852,6 +5820,7 @@ dependencies = [
  "reqsign",
  "serde",
  "serde_json",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5859,7 +5828,6 @@ name = "opendal-service-azfile"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
@@ -5867,6 +5835,7 @@ dependencies = [
  "quick-xml",
  "reqsign",
  "serde",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5883,11 +5852,11 @@ name = "opendal-service-cloudflare-kv"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "opendal-core",
  "serde",
  "serde_json",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5895,7 +5864,6 @@ name = "opendal-service-ftp"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "fastpool",
  "futures",
  "futures-rustls",
@@ -5904,6 +5872,7 @@ dependencies = [
  "opendal-core",
  "rustls-native-certs 0.8.2",
  "serde",
+ "small_ctor",
  "suppaftp",
  "tokio",
 ]
@@ -5915,7 +5884,6 @@ dependencies = [
  "backon",
  "base64 0.22.1",
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
@@ -5926,6 +5894,7 @@ dependencies = [
  "reqwest",
  "serde",
  "serde_json",
+ "small_ctor",
  "tokio",
  "tracing-subscriber",
 ]
@@ -5935,7 +5904,6 @@ name = "opendal-service-ghac"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "ghac",
  "http 1.4.0",
  "log",
@@ -5946,6 +5914,7 @@ dependencies = [
  "serde",
  "serde_json",
  "sha2",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5953,12 +5922,12 @@ name = "opendal-service-hdfs-native"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "futures",
  "hdfs-native",
  "log",
  "opendal-core",
  "serde",
+ "small_ctor",
 ]
 
 [[package]]
@@ -5966,12 +5935,12 @@ name = "opendal-service-ipfs"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
  "prost 0.13.5",
  "serde",
+ "small_ctor",
  "tokio",
 ]
 
@@ -5979,21 +5948,21 @@ dependencies = [
 name = "opendal-service-moka"
 version = "0.55.0"
 dependencies = [
- "ctor",
  "log",
  "moka",
  "opendal-core",
  "serde",
+ "small_ctor",
 ]
 
 [[package]]
 name = "opendal-service-mysql"
 version = "0.55.0"
 dependencies = [
- "ctor",
  "mea",
  "opendal-core",
  "serde",
+ "small_ctor",
  "sqlx",
 ]
 
@@ -6002,13 +5971,13 @@ name = "opendal-service-obs"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
  "quick-xml",
  "reqsign",
  "serde",
+ "small_ctor",
 ]
 
 [[package]]
@@ -6017,7 +5986,6 @@ version = "0.55.0"
 dependencies = [
  "anyhow",
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
@@ -6027,6 +5995,7 @@ dependencies = [
  "reqwest",
  "serde",
  "serde_json",
+ "small_ctor",
  "tokio",
  "tracing-subscriber",
 ]
@@ -6035,10 +6004,10 @@ dependencies = [
 name = "opendal-service-postgresql"
 version = "0.55.0"
 dependencies = [
- "ctor",
  "mea",
  "opendal-core",
  "serde",
+ "small_ctor",
  "sqlx",
 ]
 
@@ -6049,7 +6018,6 @@ dependencies = [
  "base64 0.22.1",
  "bytes",
  "crc32c",
- "ctor",
  "http 1.4.0",
  "log",
  "md-5",
@@ -6063,6 +6031,7 @@ dependencies = [
  "reqwest",
  "serde",
  "serde_json",
+ "small_ctor",
  "tokio",
  "tracing-subscriber",
 ]
@@ -6071,20 +6040,20 @@ dependencies = [
 name = "opendal-service-sled"
 version = "0.55.0"
 dependencies = [
- "ctor",
  "opendal-core",
  "serde",
  "sled",
+ "small_ctor",
 ]
 
 [[package]]
 name = "opendal-service-tikv"
 version = "0.55.0"
 dependencies = [
- "ctor",
  "mea",
  "opendal-core",
  "serde",
+ "small_ctor",
  "tikv-client",
 ]
 
@@ -6093,13 +6062,13 @@ name = "opendal-service-vercel-blob"
 version = "0.55.0"
 dependencies = [
  "bytes",
- "ctor",
  "http 1.4.0",
  "log",
  "opendal-core",
  "quick-xml",
  "serde",
  "serde_json",
+ "small_ctor",
  "tokio",
 ]
 
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 17e1f361c..34a990466 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -42,7 +42,6 @@ version = "0.55.0"
 [workspace.dependencies]
 base64 = "0.22"
 bytes = "1.10"
-ctor = "0.6"
 futures = { version = "0.3", default-features = false }
 http = "1.1"
 log = "0.4"
@@ -52,6 +51,7 @@ reqsign = { version = "0.16.5", default-features = false }
 serde = { version = "1", default-features = false }
 serde_json = "1"
 sha2 = "0.10"
+small_ctor = { version = "0.1.2" }
 tokio = { version = "1.48", default-features = false }
 uuid = { version = "1", default-features = false }
 
diff --git a/core/core/Cargo.toml b/core/core/Cargo.toml
index 425c61513..17d2b81bf 100644
--- a/core/core/Cargo.toml
+++ b/core/core/Cargo.toml
@@ -140,7 +140,7 @@ anyhow = { version = "1.0.100", features = ["std"] }
 backon = { version = "1.6", features = ["tokio-sleep"] }
 base64 = { workspace = true }
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 futures = { workspace = true, default-features = false, features = [
   "std",
   "async-await",
diff --git a/core/core/src/services/alluxio/mod.rs 
b/core/core/src/services/alluxio/mod.rs
index 8b420ee98..6dcba96cf 100644
--- a/core/core/src/services/alluxio/mod.rs
+++ b/core/core/src/services/alluxio/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::AlluxioBuilder as Alluxio;
 pub use config::AlluxioConfig;
 
-#[ctor::ctor]
-fn register_alluxio_service() {
+#[small_ctor::ctor]
+unsafe fn register_alluxio_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Alluxio>(ALLUXIO_SCHEME);
 }
diff --git a/core/core/src/services/b2/mod.rs b/core/core/src/services/b2/mod.rs
index 09436541e..71587167f 100644
--- a/core/core/src/services/b2/mod.rs
+++ b/core/core/src/services/b2/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::B2Builder as B2;
 pub use config::B2Config;
 
-#[ctor::ctor]
-fn register_b2_service() {
+#[small_ctor::ctor]
+unsafe 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 236836a2b..987dda363 100644
--- a/core/core/src/services/cacache/mod.rs
+++ b/core/core/src/services/cacache/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::CacacheBuilder as Cacache;
 pub use config::CacacheConfig;
 
-#[ctor::ctor]
-fn register_cacache_service() {
+#[small_ctor::ctor]
+unsafe fn register_cacache_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Cacache>(CACACHE_SCHEME);
 }
diff --git a/core/core/src/services/compfs/mod.rs 
b/core/core/src/services/compfs/mod.rs
index 5f51aa2ed..a9c35743b 100644
--- a/core/core/src/services/compfs/mod.rs
+++ b/core/core/src/services/compfs/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::CompfsBuilder as Compfs;
 pub use config::CompfsConfig;
 
-#[ctor::ctor]
-fn register_compfs_service() {
+#[small_ctor::ctor]
+unsafe 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 f2d4ca515..2771ce3d4 100644
--- a/core/core/src/services/cos/mod.rs
+++ b/core/core/src/services/cos/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::CosBuilder as Cos;
 pub use config::CosConfig;
 
-#[ctor::ctor]
-fn register_cos_service() {
+#[small_ctor::ctor]
+unsafe 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 d773e8f86..67c72fd16 100644
--- a/core/core/src/services/d1/mod.rs
+++ b/core/core/src/services/d1/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::D1Builder as D1;
 pub use config::D1Config;
 
-#[ctor::ctor]
-fn register_d1_service() {
+#[small_ctor::ctor]
+unsafe 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 eff210847..98249596a 100644
--- a/core/core/src/services/dashmap/mod.rs
+++ b/core/core/src/services/dashmap/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::DashmapBuilder as Dashmap;
 pub use config::DashmapConfig;
 
-#[ctor::ctor]
-fn register_dashmap_service() {
+#[small_ctor::ctor]
+unsafe 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 0b7c23d77..55b90b03a 100644
--- a/core/core/src/services/dbfs/mod.rs
+++ b/core/core/src/services/dbfs/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::DbfsBuilder as Dbfs;
 pub use config::DbfsConfig;
 
-#[ctor::ctor]
-fn register_dbfs_service() {
+#[small_ctor::ctor]
+unsafe 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 3195bf5e5..749a51f94 100644
--- a/core/core/src/services/dropbox/mod.rs
+++ b/core/core/src/services/dropbox/mod.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use builder::DropboxBuilder as Dropbox;
 pub use config::DropboxConfig;
 
-#[ctor::ctor]
-fn register_dropbox_service() {
+#[small_ctor::ctor]
+unsafe 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 a28e5fdca..a542b5af8 100644
--- a/core/core/src/services/etcd/mod.rs
+++ b/core/core/src/services/etcd/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::EtcdBuilder as Etcd;
 pub use config::EtcdConfig;
 
-#[ctor::ctor]
-fn register_etcd_service() {
+#[small_ctor::ctor]
+unsafe 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 cf67f3f0b..2183af69c 100644
--- a/core/core/src/services/foundationdb/mod.rs
+++ b/core/core/src/services/foundationdb/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::FoundationdbBuilder as Foundationdb;
 pub use config::FoundationdbConfig;
 
-#[ctor::ctor]
-fn register_foundationdb_service() {
+#[small_ctor::ctor]
+unsafe 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 96b064718..cb5ea8247 100644
--- a/core/core/src/services/fs/mod.rs
+++ b/core/core/src/services/fs/mod.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use backend::FsBuilder as Fs;
 pub use config::FsConfig;
 
-#[ctor::ctor]
-fn register_fs_service() {
+#[small_ctor::ctor]
+unsafe fn register_fs_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Fs>(FS_SCHEME);
 }
diff --git a/core/core/src/services/gdrive/mod.rs 
b/core/core/src/services/gdrive/mod.rs
index 25d6f1aed..c934c6bd7 100644
--- a/core/core/src/services/gdrive/mod.rs
+++ b/core/core/src/services/gdrive/mod.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use builder::GdriveBuilder as Gdrive;
 pub use config::GdriveConfig;
 
-#[ctor::ctor]
-fn register_gdrive_service() {
+#[small_ctor::ctor]
+unsafe fn register_gdrive_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Gdrive>(GDRIVE_SCHEME);
 }
diff --git a/core/core/src/services/github/mod.rs 
b/core/core/src/services/github/mod.rs
index 9cb8c0abd..a37eeac82 100644
--- a/core/core/src/services/github/mod.rs
+++ b/core/core/src/services/github/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::GithubBuilder as Github;
 pub use config::GithubConfig;
 
-#[ctor::ctor]
-fn register_github_service() {
+#[small_ctor::ctor]
+unsafe 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 93d4fe611..4baa23cca 100644
--- a/core/core/src/services/gridfs/mod.rs
+++ b/core/core/src/services/gridfs/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::GridfsBuilder as Gridfs;
 pub use config::GridfsConfig;
 
-#[ctor::ctor]
-fn register_gridfs_service() {
+#[small_ctor::ctor]
+unsafe 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 de2c0e349..ed3cb17e0 100644
--- a/core/core/src/services/hdfs/mod.rs
+++ b/core/core/src/services/hdfs/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::HdfsBuilder as Hdfs;
 pub use config::HdfsConfig;
 
-#[ctor::ctor]
-fn register_hdfs_service() {
+#[small_ctor::ctor]
+unsafe fn register_hdfs_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Hdfs>(HDFS_SCHEME);
 }
diff --git a/core/core/src/services/http/mod.rs 
b/core/core/src/services/http/mod.rs
index 5b3975d7b..59eaaaa64 100644
--- a/core/core/src/services/http/mod.rs
+++ b/core/core/src/services/http/mod.rs
@@ -28,7 +28,7 @@ mod error;
 pub use backend::HttpBuilder as Http;
 pub use config::HttpConfig;
 
-#[ctor::ctor]
-fn register_http_service() {
+#[small_ctor::ctor]
+unsafe 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 3576c2216..bb82b0532 100644
--- a/core/core/src/services/huggingface/mod.rs
+++ b/core/core/src/services/huggingface/mod.rs
@@ -29,7 +29,7 @@ mod lister;
 pub use backend::HuggingfaceBuilder as Huggingface;
 pub use config::HuggingfaceConfig;
 
-#[ctor::ctor]
-fn register_huggingface_service() {
+#[small_ctor::ctor]
+unsafe fn register_huggingface_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Huggingface>(HUGGINGFACE_SCHEME);
 }
diff --git a/core/core/src/services/ipmfs/mod.rs 
b/core/core/src/services/ipmfs/mod.rs
index 58f92b507..327e96ae9 100644
--- a/core/core/src/services/ipmfs/mod.rs
+++ b/core/core/src/services/ipmfs/mod.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use builder::IpmfsBuilder as Ipmfs;
 pub use config::IpmfsConfig;
 
-#[ctor::ctor]
-fn register_ipmfs_service() {
+#[small_ctor::ctor]
+unsafe 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 fe86028e4..b7a158a78 100644
--- a/core/core/src/services/koofr/mod.rs
+++ b/core/core/src/services/koofr/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::KoofrBuilder as Koofr;
 pub use config::KoofrConfig;
 
-#[ctor::ctor]
-fn register_koofr_service() {
+#[small_ctor::ctor]
+unsafe 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 cc55ed939..1af778114 100644
--- a/core/core/src/services/lakefs/mod.rs
+++ b/core/core/src/services/lakefs/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::LakefsBuilder as Lakefs;
 pub use config::LakefsConfig;
 
-#[ctor::ctor]
-fn register_lakefs_service() {
+#[small_ctor::ctor]
+unsafe 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 c10fef6a0..9bffdfad9 100644
--- a/core/core/src/services/memcached/mod.rs
+++ b/core/core/src/services/memcached/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::MemcachedBuilder as Memcached;
 pub use config::MemcachedConfig;
 
-#[ctor::ctor]
-fn register_memcached_service() {
+#[small_ctor::ctor]
+unsafe 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 80a0bf3da..00689bf43 100644
--- a/core/core/src/services/memory/mod.rs
+++ b/core/core/src/services/memory/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::MemoryBuilder as Memory;
 pub use config::MemoryConfig;
 
-#[ctor::ctor]
-fn register_memory_service() {
+#[small_ctor::ctor]
+unsafe 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 1df625522..fde5ff6e8 100644
--- a/core/core/src/services/mini_moka/mod.rs
+++ b/core/core/src/services/mini_moka/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::MiniMokaBuilder as MiniMoka;
 pub use config::MiniMokaConfig;
 
-#[ctor::ctor]
-fn register_minimoka_service() {
+#[small_ctor::ctor]
+unsafe fn register_minimoka_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<MiniMoka>(MINI_MOKA_SCHEME);
 }
diff --git a/core/core/src/services/mongodb/mod.rs 
b/core/core/src/services/mongodb/mod.rs
index e2fc75c48..3860831b4 100644
--- a/core/core/src/services/mongodb/mod.rs
+++ b/core/core/src/services/mongodb/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::MongodbBuilder as Mongodb;
 pub use config::MongodbConfig;
 
-#[ctor::ctor]
-fn register_mongodb_service() {
+#[small_ctor::ctor]
+unsafe 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 1915761d2..58d8e2d47 100644
--- a/core/core/src/services/monoiofs/mod.rs
+++ b/core/core/src/services/monoiofs/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::MonoiofsBuilder as Monoiofs;
 pub use config::MonoiofsConfig;
 
-#[ctor::ctor]
-fn register_monoiofs_service() {
+#[small_ctor::ctor]
+unsafe fn register_monoiofs_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Monoiofs>(MONOIOFS_SCHEME);
 }
diff --git a/core/core/src/services/onedrive/mod.rs 
b/core/core/src/services/onedrive/mod.rs
index ebf9f189e..e93f712ab 100644
--- a/core/core/src/services/onedrive/mod.rs
+++ b/core/core/src/services/onedrive/mod.rs
@@ -33,7 +33,7 @@ mod writer;
 pub use builder::OnedriveBuilder as Onedrive;
 pub use config::OnedriveConfig;
 
-#[ctor::ctor]
-fn register_onedrive_service() {
+#[small_ctor::ctor]
+unsafe fn register_onedrive_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Onedrive>(ONEDRIVE_SCHEME);
 }
diff --git a/core/core/src/services/pcloud/mod.rs 
b/core/core/src/services/pcloud/mod.rs
index 3295b09ba..ccad53bca 100644
--- a/core/core/src/services/pcloud/mod.rs
+++ b/core/core/src/services/pcloud/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::PcloudBuilder as Pcloud;
 pub use config::PcloudConfig;
 
-#[ctor::ctor]
-fn register_pcloud_service() {
+#[small_ctor::ctor]
+unsafe 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 1dd724b05..8d5bec8ec 100644
--- a/core/core/src/services/persy/mod.rs
+++ b/core/core/src/services/persy/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::PersyBuilder as Persy;
 pub use config::PersyConfig;
 
-#[ctor::ctor]
-fn register_persy_service() {
+#[small_ctor::ctor]
+unsafe fn register_persy_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Persy>(PERSY_SCHEME);
 }
diff --git a/core/core/src/services/redb/mod.rs 
b/core/core/src/services/redb/mod.rs
index 3d653a1e6..9eeeddb53 100644
--- a/core/core/src/services/redb/mod.rs
+++ b/core/core/src/services/redb/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::RedbBuilder as Redb;
 pub use config::RedbConfig;
 
-#[ctor::ctor]
-fn register_redb_service() {
+#[small_ctor::ctor]
+unsafe 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 6d0563bcc..34f1a7386 100644
--- a/core/core/src/services/redis/mod.rs
+++ b/core/core/src/services/redis/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::RedisBuilder as Redis;
 pub use config::RedisConfig;
 
-#[ctor::ctor]
-fn register_redis_service() {
+#[small_ctor::ctor]
+unsafe 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 4447dc778..c2f20d4d6 100644
--- a/core/core/src/services/rocksdb/mod.rs
+++ b/core/core/src/services/rocksdb/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::RocksdbBuilder as Rocksdb;
 pub use config::RocksdbConfig;
 
-#[ctor::ctor]
-fn register_rocksdb_service() {
+#[small_ctor::ctor]
+unsafe fn register_rocksdb_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Rocksdb>(ROCKSDB_SCHEME);
 }
diff --git a/core/core/src/services/seafile/mod.rs 
b/core/core/src/services/seafile/mod.rs
index 94abafc0b..b752d99a6 100644
--- a/core/core/src/services/seafile/mod.rs
+++ b/core/core/src/services/seafile/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::SeafileBuilder as Seafile;
 pub use config::SeafileConfig;
 
-#[ctor::ctor]
-fn register_seafile_service() {
+#[small_ctor::ctor]
+unsafe 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 5712c4bdc..66f8d1fcb 100644
--- a/core/core/src/services/sftp/mod.rs
+++ b/core/core/src/services/sftp/mod.rs
@@ -33,7 +33,7 @@ mod writer;
 pub use backend::SftpBuilder as Sftp;
 pub use config::SftpConfig;
 
-#[ctor::ctor]
-fn register_sftp_service() {
+#[small_ctor::ctor]
+unsafe fn register_sftp_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Sftp>(SFTP_SCHEME);
 }
diff --git a/core/core/src/services/sqlite/mod.rs 
b/core/core/src/services/sqlite/mod.rs
index c6783d57f..025aec6e8 100644
--- a/core/core/src/services/sqlite/mod.rs
+++ b/core/core/src/services/sqlite/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::SqliteBuilder as Sqlite;
 pub use config::SqliteConfig;
 
-#[ctor::ctor]
-fn register_sqlite_service() {
+#[small_ctor::ctor]
+unsafe 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 722ace1e5..a9852275f 100644
--- a/core/core/src/services/surrealdb/mod.rs
+++ b/core/core/src/services/surrealdb/mod.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::SurrealdbBuilder as Surrealdb;
 pub use config::SurrealdbConfig;
 
-#[ctor::ctor]
-fn register_surrealdb_service() {
+#[small_ctor::ctor]
+unsafe 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 506de54d5..4f92e6b3d 100644
--- a/core/core/src/services/swift/mod.rs
+++ b/core/core/src/services/swift/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::SwiftBuilder as Swift;
 pub use config::SwiftConfig;
 
-#[ctor::ctor]
-fn register_swift_service() {
+#[small_ctor::ctor]
+unsafe fn register_swift_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Swift>(SWIFT_SCHEME);
 }
diff --git a/core/core/src/services/upyun/mod.rs 
b/core/core/src/services/upyun/mod.rs
index 960f2d241..b56301941 100644
--- a/core/core/src/services/upyun/mod.rs
+++ b/core/core/src/services/upyun/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::UpyunBuilder as Upyun;
 pub use config::UpyunConfig;
 
-#[ctor::ctor]
-fn register_upyun_service() {
+#[small_ctor::ctor]
+unsafe 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 fe3ae58fc..d375e0a9b 100644
--- a/core/core/src/services/vercel_artifacts/mod.rs
+++ b/core/core/src/services/vercel_artifacts/mod.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use builder::VercelArtifactsBuilder as VercelArtifacts;
 pub use config::VercelArtifactsConfig;
 
-#[ctor::ctor]
-fn register_vercelartifacts_service() {
+#[small_ctor::ctor]
+unsafe fn register_vercelartifacts_service() {
     
DEFAULT_OPERATOR_REGISTRY.register::<VercelArtifacts>(VERCEL_ARTIFACTS_SCHEME);
 }
diff --git a/core/core/src/services/webdav/mod.rs 
b/core/core/src/services/webdav/mod.rs
index 1fd1f194e..be22eaba3 100644
--- a/core/core/src/services/webdav/mod.rs
+++ b/core/core/src/services/webdav/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::WebdavBuilder as Webdav;
 pub use config::WebdavConfig;
 
-#[ctor::ctor]
-fn register_webdav_service() {
+#[small_ctor::ctor]
+unsafe 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 7dd99edc8..6f2e3095c 100644
--- a/core/core/src/services/webhdfs/mod.rs
+++ b/core/core/src/services/webhdfs/mod.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use backend::WebhdfsBuilder as Webhdfs;
 pub use config::WebhdfsConfig;
 
-#[ctor::ctor]
-fn register_webhdfs_service() {
+#[small_ctor::ctor]
+unsafe 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 271d2da6d..82a01fde0 100644
--- a/core/core/src/services/yandex_disk/mod.rs
+++ b/core/core/src/services/yandex_disk/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::YandexDiskBuilder as YandexDisk;
 pub use config::YandexDiskConfig;
 
-#[ctor::ctor]
-fn register_yandexdisk_service() {
+#[small_ctor::ctor]
+unsafe fn register_yandexdisk_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<YandexDisk>(YANDEX_DISK_SCHEME);
 }
diff --git a/core/services/aliyun-drive/Cargo.toml 
b/core/services/aliyun-drive/Cargo.toml
index af711d04c..7f36a26d1 100644
--- a/core/services/aliyun-drive/Cargo.toml
+++ b/core/services/aliyun-drive/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 mea = { version = "0.5.1" }
diff --git a/core/services/aliyun-drive/src/lib.rs 
b/core/services/aliyun-drive/src/lib.rs
index a70d37719..6b99baa00 100644
--- a/core/services/aliyun-drive/src/lib.rs
+++ b/core/services/aliyun-drive/src/lib.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::AliyunDriveBuilder as AliyunDrive;
 pub use config::AliyunDriveConfig;
 
-#[ctor::ctor]
-fn register_aliyun_drive_service() {
+#[small_ctor::ctor]
+unsafe fn register_aliyun_drive_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<AliyunDrive>(ALIYUN_DRIVE_SCHEME);
 }
diff --git a/core/services/azblob/Cargo.toml b/core/services/azblob/Cargo.toml
index a33c606bb..d8dfe6895 100644
--- a/core/services/azblob/Cargo.toml
+++ b/core/services/azblob/Cargo.toml
@@ -36,7 +36,7 @@ opendal-service-azure-common = { path = "../azure-common", 
version = "0.55.0" }
 
 base64 = { workspace = true }
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/azblob/src/lib.rs b/core/services/azblob/src/lib.rs
index 69fdf9d88..ddf04dae5 100644
--- a/core/services/azblob/src/lib.rs
+++ b/core/services/azblob/src/lib.rs
@@ -31,7 +31,7 @@ pub mod writer;
 pub use backend::AzblobBuilder as Azblob;
 pub use config::AzblobConfig;
 
-#[ctor::ctor]
-fn register_azblob_service() {
+#[small_ctor::ctor]
+unsafe fn register_azblob_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Azblob>(AZBLOB_SCHEME);
 }
diff --git a/core/services/azdls/Cargo.toml b/core/services/azdls/Cargo.toml
index e0c6e3226..89dc92439 100644
--- a/core/services/azdls/Cargo.toml
+++ b/core/services/azdls/Cargo.toml
@@ -35,7 +35,7 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 opendal-service-azure-common = { path = "../azure-common", version = "0.55.0" }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/azdls/src/lib.rs b/core/services/azdls/src/lib.rs
index 9c139e977..73f03cce8 100644
--- a/core/services/azdls/src/lib.rs
+++ b/core/services/azdls/src/lib.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::AzdlsBuilder as Azdls;
 pub use config::AzdlsConfig;
 
-#[ctor::ctor]
-fn register_azdls_service() {
+#[small_ctor::ctor]
+unsafe fn register_azdls_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Azdls>(AZDLS_SCHEME);
 }
diff --git a/core/services/azfile/Cargo.toml b/core/services/azfile/Cargo.toml
index 85fe442ea..967886aba 100644
--- a/core/services/azfile/Cargo.toml
+++ b/core/services/azfile/Cargo.toml
@@ -35,7 +35,7 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 opendal-service-azure-common = { path = "../azure-common", version = "0.55.0" }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/azfile/src/lib.rs b/core/services/azfile/src/lib.rs
index ea3f41abf..a048c39c0 100644
--- a/core/services/azfile/src/lib.rs
+++ b/core/services/azfile/src/lib.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::AzfileBuilder as Azfile;
 pub use config::AzfileConfig;
 
-#[ctor::ctor]
-fn register_azfile_service() {
+#[small_ctor::ctor]
+unsafe fn register_azfile_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Azfile>(AZFILE_SCHEME);
 }
diff --git a/core/services/cloudflare-kv/Cargo.toml 
b/core/services/cloudflare-kv/Cargo.toml
index 4e1a9b5aa..34c5e6f3c 100644
--- a/core/services/cloudflare-kv/Cargo.toml
+++ b/core/services/cloudflare-kv/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 serde = { workspace = true, features = ["derive"] }
 serde_json = { workspace = true }
diff --git a/core/services/cloudflare-kv/src/lib.rs 
b/core/services/cloudflare-kv/src/lib.rs
index fc0d489e0..dcb7be18a 100644
--- a/core/services/cloudflare-kv/src/lib.rs
+++ b/core/services/cloudflare-kv/src/lib.rs
@@ -34,7 +34,7 @@ pub use config::CloudflareKvConfig;
 /// Default scheme for cloudflare-kv service.
 pub const CLOUDFLARE_KV_SCHEME: &str = "cloudflare-kv";
 
-#[ctor::ctor]
-fn register_cloudflare_kv_service() {
+#[small_ctor::ctor]
+unsafe fn register_cloudflare_kv_service() {
     
opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<CloudflareKv>(CLOUDFLARE_KV_SCHEME);
 }
diff --git a/core/services/ftp/Cargo.toml b/core/services/ftp/Cargo.toml
index 5a690538d..916a28245 100644
--- a/core/services/ftp/Cargo.toml
+++ b/core/services/ftp/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 fastpool = "1.0.2"
 futures = { workspace = true, default-features = false, features = [
   "std",
diff --git a/core/services/ftp/src/lib.rs b/core/services/ftp/src/lib.rs
index c812d83dc..05181c659 100644
--- a/core/services/ftp/src/lib.rs
+++ b/core/services/ftp/src/lib.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use backend::FtpBuilder as Ftp;
 pub use config::FtpConfig;
 
-#[ctor::ctor]
-fn register_ftp_service() {
+#[small_ctor::ctor]
+unsafe fn register_ftp_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Ftp>(FTP_SCHEME);
 }
diff --git a/core/services/gcs/Cargo.toml b/core/services/gcs/Cargo.toml
index 8780772ec..dbed082a8 100644
--- a/core/services/gcs/Cargo.toml
+++ b/core/services/gcs/Cargo.toml
@@ -36,7 +36,7 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 backon = "1.6"
 base64 = { workspace = true }
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 percent-encoding = "2.3"
diff --git a/core/services/gcs/src/lib.rs b/core/services/gcs/src/lib.rs
index 9d9b3e80d..92e10ac22 100644
--- a/core/services/gcs/src/lib.rs
+++ b/core/services/gcs/src/lib.rs
@@ -34,7 +34,7 @@ pub use config::GcsConfig;
 /// Default scheme for gcs service.
 pub const GCS_SCHEME: &str = "gcs";
 
-#[ctor::ctor]
-fn register_gcs_service() {
+#[small_ctor::ctor]
+unsafe fn register_gcs_service() {
     opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<Gcs>(GCS_SCHEME);
 }
diff --git a/core/services/ghac/Cargo.toml b/core/services/ghac/Cargo.toml
index dd9e46012..6cb8a1f7f 100644
--- a/core/services/ghac/Cargo.toml
+++ b/core/services/ghac/Cargo.toml
@@ -35,7 +35,7 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 opendal-service-azblob = { path = "../azblob", version = "0.55.0", 
default-features = false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 ghac = { version = "0.2.0", default-features = false }
 http = { workspace = true }
 log = { workspace = true }
diff --git a/core/services/ghac/src/lib.rs b/core/services/ghac/src/lib.rs
index c1981b075..b8e3f805f 100644
--- a/core/services/ghac/src/lib.rs
+++ b/core/services/ghac/src/lib.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::GhacBuilder as Ghac;
 pub use config::GhacConfig;
 
-#[ctor::ctor]
-fn register_ghac_service() {
+#[small_ctor::ctor]
+unsafe fn register_ghac_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Ghac>(GHAC_SCHEME);
 }
diff --git a/core/services/hdfs-native/Cargo.toml 
b/core/services/hdfs-native/Cargo.toml
index b6186be67..45e74985d 100644
--- a/core/services/hdfs-native/Cargo.toml
+++ b/core/services/hdfs-native/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 futures = { workspace = true }
 hdfs-native = { version = "0.13" }
 log = { workspace = true }
diff --git a/core/services/hdfs-native/src/lib.rs 
b/core/services/hdfs-native/src/lib.rs
index 1f8b77e36..952b0f1ca 100644
--- a/core/services/hdfs-native/src/lib.rs
+++ b/core/services/hdfs-native/src/lib.rs
@@ -32,7 +32,7 @@ mod writer;
 pub use backend::HdfsNativeBuilder as HdfsNative;
 pub use config::HdfsNativeConfig;
 
-#[ctor::ctor]
-fn register_hdfs_native_service() {
+#[small_ctor::ctor]
+unsafe fn register_hdfs_native_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<HdfsNative>(HDFS_NATIVE_SCHEME);
 }
diff --git a/core/services/ipfs/Cargo.toml b/core/services/ipfs/Cargo.toml
index 107665f8f..2ff5c5095 100644
--- a/core/services/ipfs/Cargo.toml
+++ b/core/services/ipfs/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 prost = "0.13"
diff --git a/core/services/ipfs/src/lib.rs b/core/services/ipfs/src/lib.rs
index 758545ae5..488d67514 100644
--- a/core/services/ipfs/src/lib.rs
+++ b/core/services/ipfs/src/lib.rs
@@ -31,7 +31,7 @@ pub use config::IpfsConfig;
 /// Default scheme for ipfs service.
 pub const IPFS_SCHEME: &str = "ipfs";
 
-#[ctor::ctor]
-fn register_ipfs_service() {
+#[small_ctor::ctor]
+unsafe fn register_ipfs_service() {
     opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<Ipfs>(IPFS_SCHEME);
 }
diff --git a/core/services/moka/Cargo.toml b/core/services/moka/Cargo.toml
index 6bb402dd8..e80d9e64d 100644
--- a/core/services/moka/Cargo.toml
+++ b/core/services/moka/Cargo.toml
@@ -33,7 +33,7 @@ all-features = true
 [dependencies]
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 log = { workspace = true }
 moka = { version = "0.12", features = ["future", "sync"] }
 serde = { workspace = true, features = ["derive"] }
diff --git a/core/services/moka/src/lib.rs b/core/services/moka/src/lib.rs
index 9b9e70215..eff732f30 100644
--- a/core/services/moka/src/lib.rs
+++ b/core/services/moka/src/lib.rs
@@ -34,7 +34,7 @@ pub use core::MokaValue;
 /// Default scheme for moka service.
 pub const MOKA_SCHEME: &str = "moka";
 
-#[ctor::ctor]
-fn register_moka_service() {
+#[small_ctor::ctor]
+unsafe fn register_moka_service() {
     opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<Moka>(MOKA_SCHEME);
 }
diff --git a/core/services/mysql/Cargo.toml b/core/services/mysql/Cargo.toml
index 99efc9871..e4ef0c782 100644
--- a/core/services/mysql/Cargo.toml
+++ b/core/services/mysql/Cargo.toml
@@ -33,7 +33,7 @@ all-features = true
 [dependencies]
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 mea = { version = "0.5.1" }
 serde = { workspace = true, features = ["derive"] }
 sqlx = { version = "0.8.0", features = ["runtime-tokio-rustls", "mysql"] }
diff --git a/core/services/mysql/src/lib.rs b/core/services/mysql/src/lib.rs
index c16bcdc06..f8984c287 100644
--- a/core/services/mysql/src/lib.rs
+++ b/core/services/mysql/src/lib.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::MysqlBuilder as Mysql;
 pub use config::MysqlConfig;
 
-#[ctor::ctor]
-fn register_mysql_service() {
+#[small_ctor::ctor]
+unsafe fn register_mysql_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Mysql>(MYSQL_SCHEME);
 }
diff --git a/core/services/obs/Cargo.toml b/core/services/obs/Cargo.toml
index fbd4292e5..632d54909 100644
--- a/core/services/obs/Cargo.toml
+++ b/core/services/obs/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/obs/src/lib.rs b/core/services/obs/src/lib.rs
index aa60f8e09..256c5226c 100644
--- a/core/services/obs/src/lib.rs
+++ b/core/services/obs/src/lib.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::ObsBuilder as Obs;
 pub use config::ObsConfig;
 
-#[ctor::ctor]
-fn register_obs_service() {
+#[small_ctor::ctor]
+unsafe fn register_obs_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Obs>(OBS_SCHEME);
 }
diff --git a/core/services/oss/Cargo.toml b/core/services/oss/Cargo.toml
index 9448602a1..2f1958c2c 100644
--- a/core/services/oss/Cargo.toml
+++ b/core/services/oss/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/oss/src/lib.rs b/core/services/oss/src/lib.rs
index a995973d2..03cbce1b4 100644
--- a/core/services/oss/src/lib.rs
+++ b/core/services/oss/src/lib.rs
@@ -33,7 +33,7 @@ pub use config::OssConfig;
 /// Default scheme for oss service.
 pub const OSS_SCHEME: &str = "oss";
 
-#[ctor::ctor]
-fn register_oss_service() {
+#[small_ctor::ctor]
+unsafe fn register_oss_service() {
     opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<Oss>(OSS_SCHEME);
 }
diff --git a/core/services/postgresql/Cargo.toml 
b/core/services/postgresql/Cargo.toml
index 926aaeef3..0a88871c3 100644
--- a/core/services/postgresql/Cargo.toml
+++ b/core/services/postgresql/Cargo.toml
@@ -33,7 +33,7 @@ all-features = true
 [dependencies]
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 mea = { version = "0.5.1" }
 serde = { workspace = true, features = ["derive"] }
 sqlx = { version = "0.8.0", features = ["runtime-tokio-rustls", "postgres"] }
diff --git a/core/services/postgresql/src/lib.rs 
b/core/services/postgresql/src/lib.rs
index 0d2d27635..f36bc44ff 100644
--- a/core/services/postgresql/src/lib.rs
+++ b/core/services/postgresql/src/lib.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::PostgresqlBuilder as Postgresql;
 pub use config::PostgresqlConfig;
 
-#[ctor::ctor]
-fn register_postgresql_service() {
+#[small_ctor::ctor]
+unsafe fn register_postgresql_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Postgresql>(POSTGRESQL_SCHEME);
 }
diff --git a/core/services/s3/Cargo.toml b/core/services/s3/Cargo.toml
index 923cdedcb..331b68103 100644
--- a/core/services/s3/Cargo.toml
+++ b/core/services/s3/Cargo.toml
@@ -36,7 +36,7 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
 base64 = { workspace = true }
 bytes = { workspace = true }
 crc32c = "0.6.6"
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 md-5 = "0.10"
diff --git a/core/services/s3/src/lib.rs b/core/services/s3/src/lib.rs
index 57b39c419..bb8085d7c 100644
--- a/core/services/s3/src/lib.rs
+++ b/core/services/s3/src/lib.rs
@@ -33,7 +33,7 @@ pub use config::S3Config;
 /// Default scheme for s3 service.
 pub const S3_SCHEME: &str = "s3";
 
-#[ctor::ctor]
-fn register_s3_service() {
+#[small_ctor::ctor]
+unsafe fn register_s3_service() {
     opendal_core::DEFAULT_OPERATOR_REGISTRY.register::<S3>(S3_SCHEME);
 }
diff --git a/core/services/s3/src/mod.rs b/core/services/s3/src/mod.rs
index 5407b1653..580c0f2fe 100644
--- a/core/services/s3/src/mod.rs
+++ b/core/services/s3/src/mod.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::S3Builder as S3;
 pub use config::S3Config;
 
-#[ctor::ctor]
-fn register_s3_service() {
+#[small_ctor::ctor]
+unsafe fn register_s3_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<S3>(S3_SCHEME);
 }
diff --git a/core/services/sled/Cargo.toml b/core/services/sled/Cargo.toml
index e6cf682c9..b20b40a5f 100644
--- a/core/services/sled/Cargo.toml
+++ b/core/services/sled/Cargo.toml
@@ -35,6 +35,6 @@ opendal-core = { path = "../../core", version = "0.55.0", 
default-features = fal
   "internal-tokio-rt",
 ] }
 
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 serde = { workspace = true, features = ["derive"] }
 sled = "0.34.7"
diff --git a/core/services/sled/src/lib.rs b/core/services/sled/src/lib.rs
index 91196be64..1134c0675 100644
--- a/core/services/sled/src/lib.rs
+++ b/core/services/sled/src/lib.rs
@@ -30,7 +30,7 @@ mod writer;
 pub use backend::SledBuilder as Sled;
 pub use config::SledConfig;
 
-#[ctor::ctor]
-fn register_sled_service() {
+#[small_ctor::ctor]
+unsafe fn register_sled_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Sled>(SLED_SCHEME);
 }
diff --git a/core/services/tikv/Cargo.toml b/core/services/tikv/Cargo.toml
index 1686dc076..304b88f2d 100644
--- a/core/services/tikv/Cargo.toml
+++ b/core/services/tikv/Cargo.toml
@@ -33,7 +33,7 @@ all-features = true
 [dependencies]
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 mea = { version = "0.5.1" }
 serde = { workspace = true, features = ["derive"] }
 tikv-client = { version = "0.3.0", default-features = false }
diff --git a/core/services/tikv/src/lib.rs b/core/services/tikv/src/lib.rs
index 4eeb536ef..82750fefc 100644
--- a/core/services/tikv/src/lib.rs
+++ b/core/services/tikv/src/lib.rs
@@ -29,7 +29,7 @@ mod writer;
 pub use backend::TikvBuilder as Tikv;
 pub use config::TikvConfig;
 
-#[ctor::ctor]
-fn register_tikv_service() {
+#[small_ctor::ctor]
+unsafe fn register_tikv_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<Tikv>(TIKV_SCHEME);
 }
diff --git a/core/services/vercel-blob/Cargo.toml 
b/core/services/vercel-blob/Cargo.toml
index d7ff7eb75..614aa9389 100644
--- a/core/services/vercel-blob/Cargo.toml
+++ b/core/services/vercel-blob/Cargo.toml
@@ -34,7 +34,7 @@ all-features = true
 opendal-core = { path = "../../core", version = "0.55.0", default-features = 
false }
 
 bytes = { workspace = true }
-ctor = { workspace = true }
+small_ctor = { workspace = true }
 http = { workspace = true }
 log = { workspace = true }
 quick-xml = { workspace = true, features = ["serialize", "overlapped-lists"] }
diff --git a/core/services/vercel-blob/src/lib.rs 
b/core/services/vercel-blob/src/lib.rs
index 495297e0b..932516340 100644
--- a/core/services/vercel-blob/src/lib.rs
+++ b/core/services/vercel-blob/src/lib.rs
@@ -31,7 +31,7 @@ mod writer;
 pub use backend::VercelBlobBuilder as VercelBlob;
 pub use config::VercelBlobConfig;
 
-#[ctor::ctor]
-fn register_vercelblob_service() {
+#[small_ctor::ctor]
+unsafe fn register_vercelblob_service() {
     DEFAULT_OPERATOR_REGISTRY.register::<VercelBlob>(VERCEL_BLOB_SCHEME);
 }

Reply via email to