opendal 0.44.1

Apache OpenDALâ„¢: Access data freely, painlessly, and efficiently.
Documentation
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[package]
categories = ["filesystem"]
description = "Apache OpenDALâ„¢: Access data freely, painlessly, and efficiently."
exclude = ["/tests/"]
keywords = ["storage", "fs", "s3", "azblob", "gcs"]
name = "opendal"

authors.workspace = true
edition.workspace = true
homepage.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true
version.workspace = true

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docs"]

[features]
default = [
  "rustls",
  "services-azblob",
  "services-azdls",
  "services-cos",
  "services-fs",
  "services-gcs",
  "services-ghac",
  "services-http",
  "services-ipmfs",
  "services-memory",
  "services-obs",
  "services-oss",
  "services-s3",
  "services-webdav",
  "services-webhdfs",
  "services-azfile",
]

# Build test utils or not.
#
# This features is used to control whether or not to build opendal's test utils.
# And doesn't have any other effects.
#
# You should never enable this feature unless you are developing opendal.
tests = ["dep:rand", "dep:sha2", "dep:dotenvy"]

# Enable trust-dns for pure rust dns cache.
trust-dns = ["reqwest/trust-dns"]

# Enable rustls for TLS support
rustls = ["reqwest/rustls-tls-native-roots"]
# Enable native-tls for TLS support
native-tls = ["reqwest/native-tls"]
# Enable vendored native-tls for TLS support
native-tls-vendored = ["reqwest/native-tls-vendored"]

# Enable all layers.
layers-all = [
  "layers-chaos",
  "layers-metrics",
  "layers-prometheus",
  "layers-tracing",
  "layers-minitrace",
  "layers-throttle",
  "layers-await-tree",
  "layers-async-backtrace",
]
# Enable layers chaos support
layers-chaos = ["dep:rand"]
# Enable layers metrics support
layers-metrics = ["dep:metrics"]
# Enable layers prometheus support, with tikv/prometheus-rs crate
layers-prometheus = ["dep:prometheus"]
# Enable layers prometheus support, with prometheus-client crate
layers-prometheus-client = ["dep:prometheus-client"]
# Enable layers madsim support
layers-madsim = ["dep:madsim"]
# Enable layers minitrace support.
layers-minitrace = ["dep:minitrace"]
# Enable layers tracing support.
layers-tracing = ["dep:tracing"]
# Enable layers oteltrace support.
layers-otel-trace = ["dep:opentelemetry"]
# Enable layers throttle support.
layers-throttle = ["dep:governor"]
# Enable layers await-tree support.
layers-await-tree = ["dep:await-tree"]
# Enable layers async-backtrace support.
layers-async-backtrace = ["dep:async-backtrace"]

services-alluxio = []
services-atomicserver = ["dep:atomic_lib"]
services-azblob = [
  "dep:sha2",
  "dep:reqsign",
  "reqsign?/services-azblob",
  "reqsign?/reqwest_request",
]
services-azdls = [
  "dep:reqsign",
  "reqsign?/services-azblob",
  "reqsign?/reqwest_request",
]
services-azfile = []
services-b2 = []
services-seafile = []
services-upyun = ["dep:hmac", "dep:sha1"]
services-chainsafe = []
services-cacache = ["dep:cacache"]
services-cloudflare-kv = []
services-cos = [
  "dep:reqsign",
  "reqsign?/services-tencent",
  "reqsign?/reqwest_request",
]
services-d1 = []
services-dashmap = ["dep:dashmap"]
services-dbfs = []
services-dropbox = []
services-etcd = ["dep:etcd-client", "dep:bb8"]
services-foundationdb = ["dep:foundationdb"]
services-fs = ["tokio/fs"]
services-ftp = ["dep:suppaftp", "dep:bb8", "dep:async-tls" ]
services-gcs = [
  "dep:reqsign",
  "reqsign?/services-google",
  "reqsign?/reqwest_request",
]
services-gdrive = []
services-ghac = []
services-gridfs = ["dep:mongodb"]
services-hdfs = ["dep:hdrs"]
services-http = []
services-huggingface = []
services-ipfs = ["dep:prost"]
services-ipmfs = []
services-libsql = ["dep:hrana-client-proto"]
services-memcached = ["dep:bb8"]
services-memory = []
services-mini-moka = ["dep:mini-moka"]
services-moka = ["dep:moka"]
services-mongodb = ["dep:mongodb"]
services-mysql = ["dep:mysql_async"]
services-obs = [
  "dep:reqsign",
  "reqsign?/services-huaweicloud",
  "reqsign?/reqwest_request",
]
services-onedrive = []
services-oss = [
  "dep:reqsign",
  "reqsign?/services-aliyun",
  "reqsign?/reqwest_request",
]
services-persy = ["dep:persy"]
services-postgresql = ["dep:tokio-postgres", "dep:bb8", "dep:bb8-postgres"]
services-redb = ["dep:redb"]
services-redis = ["dep:redis", "redis?/tokio-rustls-comp"]
services-redis-native-tls = ["services-redis", "redis?/tokio-native-tls-comp"]
services-rocksdb = ["dep:rocksdb"]
services-s3 = [
  "dep:reqsign",
  "reqsign?/services-aws",
  "reqsign?/reqwest_request",
]
services-sftp = ["dep:openssh", "dep:openssh-sftp-client", "dep:dirs"]
services-sled = ["dep:sled"]
services-sqlite = ["dep:rusqlite", "dep:r2d2"]
services-supabase = []
services-swift = []
services-tikv = ["tikv-client"]
services-vercel-artifacts = []
# Deprecated
# wasabi services support has been removed.
# We will remove this feature in next version.
services-wasabi = []
services-webdav = []
services-webhdfs = []

[lib]
bench = false

[[bench]]
harness = false
name = "ops"
required-features = ["tests"]

[[bench]]
harness = false
name = "oio"
required-features = ["tests"]

[[test]]
harness = false
name = "behavior"
path = "tests/behavior/main.rs"
required-features = ["tests"]

[dependencies]
anyhow = { version = "1.0.30", features = ["std"] }
async-backtrace = { version = "0.2.6", optional = true }
async-compat = "0.2"
async-trait = "0.1.68"
atomic_lib = { version = "0.34.5", optional = true }
await-tree = { version = "0.1.1", optional = true }
backon = "0.4.1"
base64 = "0.21"
bb8 = { version = "0.8", optional = true }
bb8-postgres = { version = "0.8.1", optional = true }
bytes = "1.4"
cacache = { version = "12.0", default-features = false, features = [
  "tokio-runtime",
  "mmap",
], optional = true }
chrono = { version = "0.4.28", default-features = false, features = [
  "clock",
  "std",
] }
dashmap = { version = "5.4", optional = true }
dirs = { version = "5.0.1", optional = true }
dotenvy = { version = "0.15", optional = true }
etcd-client = { version = "0.12", optional = true, features = ["tls"] }
flagset = "0.4"
foundationdb = { version = "0.8.0", features = [
  "embedded-fdb-include",
], optional = true }
futures = { version = "0.3", default-features = false, features = ["std"] }
governor = { version = "0.6.0", optional = true, features = ["std"] }
hdrs = { version = "0.3.0", optional = true, features = ["async_file"] }
hrana-client-proto = { version = "0.2.1", optional = true }
http = "0.2.9"
log = "0.4"
madsim = { version = "0.2.21", optional = true }
md-5 = "0.10"
metrics = { version = "0.20", optional = true }
mini-moka = { version = "0.10", optional = true }
minitrace = { version = "0.6", optional = true }
moka = { version = "0.12", optional = true, features = ["future", "sync"] }
mongodb = { version = "2.7.0", optional = true, features = ["tokio-runtime"] }
mysql_async = { version = "0.32.2", default-features = false, features = [
  "default-rustls",
], optional = true }
once_cell = "1"
openssh = { version = "0.10.0", optional = true }
openssh-sftp-client = { version = "0.14.0", optional = true, features = [
  "openssh",
  "tracing",
] }
opentelemetry = { version = "0.21.0", optional = true }
parking_lot = "0.12"
percent-encoding = "2"
persy = { version = "1.4.6", optional = true }
pin-project = "1"
prometheus = { version = "0.13", features = ["process"], optional = true }
prometheus-client = { version = "0.22.0", optional = true }
prost = { version = "0.11", optional = true }
quick-xml = { version = "0.30", features = ["serialize", "overlapped-lists"] }
r2d2 = { version = "0.8", optional = true }
rand = { version = "0.8", optional = true }
redb = { version = "1.1.0", optional = true }
redis = { version = "0.23.1", features = [
  "cluster-async",
  "tokio-comp",
  "connection-manager",
], optional = true }
reqsign = { version = "0.14.6", default-features = false, optional = true }
reqwest = { version = "0.11.18", features = [
  "stream",
], default-features = false }
rocksdb = { version = "0.21.0", default-features = false, optional = true }
rusqlite = { version = "0.29.0", optional = true, features = ["bundled"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
sha2 = { version = "0.10", optional = true }
hmac = { version = "0.12.1", optional = true }
sha1 = { version = "0.10.6", optional = true }
sled = { version = "0.34.7", optional = true }
suppaftp = { version = "5.2", default-features = false, features = [
  "async-secure",
  "rustls",
  "async-rustls",
], optional = true }
tikv-client = { version = "0.3.0", optional = true, default-features = false }
tokio = { version= "1.27",features = ["sync"] }
tokio-postgres = { version = "0.7.8", optional = true }
tracing = { version = "0.1", optional = true }
uuid = { version = "1", features = ["serde", "v4"] }
async-tls = { version = "0.12.0", optional = true }

[target.'cfg(target_arch = "wasm32")'.dependencies]
getrandom = { version = "0.2", features = ["js"] }

[dev-dependencies]
criterion = { version = "0.5", features = ["async", "async_tokio"] }
dotenvy = "0.15"
libtest-mimic = "0.6"
minitrace = { version = "0.6", features = ["enable"] }
opentelemetry = { version = "0.21", default-features = false, features = [
  "trace",
] }
pretty_assertions = "1"
rand = "0.8"
sha2 = "0.10"
size = "0.4"
tokio = { version = "1.27", features = ["fs", "macros", "rt-multi-thread"] }
tracing-subscriber = { version = "0.3", features = [
  "env-filter",
  "tracing-log",
] }
wiremock = "0.5"