# 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.

# DO NOT EDIT IT MANUALLY. This file is generated by opendal/dev/generate/python.rs.

"""Typed service configurations.

Each `*Config` is a `TypedDict` describing one OpenDAL service. The `scheme`
key is a `Literal` that binds the dict to its service, so a static type checker
rejects a wrong scheme, a missing required key, an unknown/misspelled key, and
a wrong value type.

Build a config with the call form or an annotated variable, then pass it to
`Operator.from_config` / `AsyncOperator.from_config`:

```python
from opendal import Operator
from opendal.config import S3Config

op = Operator.from_config(S3Config(scheme="s3", bucket="b"))

config: S3Config = {"scheme": "s3", "bucket": "b"}
op = Operator.from_config(config)
```

`ServiceConfig` is the discriminated union of every `*Config`; `from_config`
accepts it, so a single signature type-checks every service.
"""

from __future__ import annotations

import os
from typing import TYPE_CHECKING, Literal, TypedDict

if TYPE_CHECKING:
    from typing_extensions import NotRequired, Required


class AliyunDriveConfig(TypedDict):
    """Configuration for the `aliyun-drive` service."""

    scheme: Required[Literal["aliyun-drive"]]
    """The service scheme; fixed to `"aliyun-drive"`."""
    access_token: NotRequired[str]
    """The access_token of this backend.  Solution for client-only purpose. #4733  Required if no client_id, client_secret and refresh_token are provided."""
    client_id: NotRequired[str]
    """The client_id of this backend.  Required if no access_token is provided."""
    client_secret: NotRequired[str]
    """The client_secret of this backend.  Required if no access_token is provided."""
    drive_type: Required[str]
    """The drive_type of this backend.  All operations will happen under this type of drive.  Available values are `default`, `backup` and `resource`.  Fallback to default if not set or no other drives can be found."""
    refresh_token: NotRequired[str]
    """The refresh_token of this backend.  Required if no access_token is provided."""
    root: NotRequired[str | os.PathLike[str]]
    """The Root of this backend.  All operations will happen under this root.  Default to `/` if not set."""


class AlluxioConfig(TypedDict):
    """Configuration for the `alluxio` service."""

    scheme: Required[Literal["alluxio"]]
    """The service scheme; fixed to `"alluxio"`."""
    endpoint: NotRequired[str]
    """endpoint of this backend.  Endpoint must be full uri, mostly like `http://127.0.0.1:39999`."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root.  default to `/` if not set."""


class AzblobConfig(TypedDict):
    """Configuration for the `azblob` service."""

    scheme: Required[Literal["azblob"]]
    """The service scheme; fixed to `"azblob"`."""
    account_key: NotRequired[str]
    """The account key of Azblob service backend."""
    account_name: NotRequired[str]
    """The account name of Azblob service backend."""
    batch_max_operations: NotRequired[int]
    """Deprecated: Azblob delete batch capability is enabled by default with Azure Blob's 256-operation batch limit. [Deprecated since 0.57.0] Azblob delete batch capability is enabled by default with Azure Blob's 256-operation batch limit. Use CapabilityOverrideLayer to override delete_max_size for specific endpoints."""
    container: Required[str]
    """The container name of Azblob service backend."""
    encryption_algorithm: NotRequired[str]
    """The encryption algorithm of Azblob service backend."""
    encryption_key: NotRequired[str]
    """The encryption key of Azblob service backend."""
    encryption_key_sha256: NotRequired[str]
    """The encryption key sha256 of Azblob service backend."""
    endpoint: NotRequired[str]
    """The endpoint of Azblob service backend.  Endpoint must be full uri, e.g.  - Azblob: `https://accountname.blob.core.windows.net` - Azurite: `http://127.0.0.1:10000/devstoreaccount1`"""
    root: NotRequired[str | os.PathLike[str]]
    """The root of Azblob service backend.  All operations will happen under this root."""
    sas_token: NotRequired[str]
    """The sas token of Azblob service backend."""
    skip_signature: NotRequired[bool]
    """Skip signature will skip loading credentials and signing requests."""


class AzdlsConfig(TypedDict):
    """Configuration for the `azdls` service."""

    scheme: Required[Literal["azdls"]]
    """The service scheme; fixed to `"azdls"`."""
    account_key: NotRequired[str]
    """Account key of this backend. - required for shared_key authentication"""
    account_name: NotRequired[str]
    """Account name of this backend."""
    authority_host: NotRequired[str]
    """authority_host The authority host of the service principal. - required for client_credentials authentication - default value: `https://login.microsoftonline.com`"""
    client_id: NotRequired[str]
    """client_id The client id of the service principal. - required for client_credentials authentication"""
    client_secret: NotRequired[str]
    """client_secret The client secret of the service principal. - required for client_credentials authentication"""
    enable_hns: NotRequired[bool]
    """Whether hierarchical namespace (HNS) is enabled for the storage account. When enabled, recursive deletion can use pagination to avoid timeouts on large directories. - default value: `false`"""
    endpoint: NotRequired[str]
    """Endpoint of this backend."""
    filesystem: Required[str]
    """Filesystem name of this backend."""
    root: NotRequired[str | os.PathLike[str]]
    """Root of this backend."""
    sas_token: NotRequired[str]
    """sas_token The shared access signature token. - required for sas authentication"""
    tenant_id: NotRequired[str]
    """tenant_id The tenant id of the service principal. - required for client_credentials authentication"""


class AzfileConfig(TypedDict):
    """Configuration for the `azfile` service."""

    scheme: Required[Literal["azfile"]]
    """The service scheme; fixed to `"azfile"`."""
    account_key: NotRequired[str]
    """The account key for azfile."""
    account_name: NotRequired[str]
    """The account name for azfile."""
    endpoint: NotRequired[str]
    """The endpoint for azfile."""
    root: NotRequired[str | os.PathLike[str]]
    """The root path for azfile."""
    sas_token: NotRequired[str]
    """The sas token for azfile."""
    share_name: Required[str]
    """The share name for azfile."""


class B2Config(TypedDict):
    """Configuration for the `b2` service."""

    scheme: Required[Literal["b2"]]
    """The service scheme; fixed to `"b2"`."""
    application_key: NotRequired[str]
    """applicationKey of this backend.  - If application_key is set, we will take user's input first. - If not, we will try to load it from environment."""
    application_key_id: NotRequired[str]
    """keyID of this backend.  - If application_key_id is set, we will take user's input first. - If not, we will try to load it from environment."""
    bucket: Required[str]
    """bucket of this backend.  required."""
    bucket_id: Required[str]
    """bucket id of this backend.  required."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""


class CacacheConfig(TypedDict):
    """Configuration for the `cacache` service."""

    scheme: Required[Literal["cacache"]]
    """The service scheme; fixed to `"cacache"`."""
    datadir: NotRequired[str]
    """That path to the cacache data directory."""


class CloudflareKvConfig(TypedDict):
    """Configuration for the `cloudflare-kv` service."""

    scheme: Required[Literal["cloudflare-kv"]]
    """The service scheme; fixed to `"cloudflare-kv"`."""
    account_id: NotRequired[str]
    """The account ID used to authenticate with CloudFlare. Used as URI path parameter."""
    api_token: NotRequired[str]
    """The token used to authenticate with CloudFlare."""
    default_ttl: NotRequired[str]
    """The default ttl for write operations. A human readable duration string, e.g. "5s" (see https://docs.rs/humantime/latest/humantime/fn.parse_duration.html)."""
    namespace_id: NotRequired[str]
    """The namespace ID. Used as URI path parameter."""
    root: NotRequired[str | os.PathLike[str]]
    """Root within this backend."""


class CosConfig(TypedDict):
    """Configuration for the `cos` service."""

    scheme: Required[Literal["cos"]]
    """The service scheme; fixed to `"cos"`."""
    bucket: NotRequired[str]
    """Bucket of this backend."""
    disable_config_load: NotRequired[bool]
    """Disable config load so that opendal will not load config from"""
    enable_versioning: NotRequired[bool]
    """Deprecated: COS versioning capability is enabled by default. [Deprecated since 0.57.0] COS versioning capability is enabled by default and this option is no longer needed."""
    endpoint: NotRequired[str]
    """Endpoint of this backend."""
    root: NotRequired[str | os.PathLike[str]]
    """Root of this backend."""
    secret_id: NotRequired[str]
    """Secret ID of this backend."""
    secret_key: NotRequired[str]
    """Secret key of this backend."""
    security_token: NotRequired[str]
    """Security token (a.k.a. session token) of this backend.  This is used for temporary credentials issued by Tencent Cloud STS (e.g. `GetFederationToken` / `AssumeRole`). When `security_token` is provided, it will be used together with `secret_id` and `secret_key` to sign requests, and the `x-cos-security-token` header will be attached automatically by the signer.  If this field is not set, OpenDAL will also fall back to reading the token from environment variables `TENCENTCLOUD_TOKEN`, `TENCENTCLOUD_SECURITY_TOKEN` or `QCLOUD_SECRET_TOKEN` (unless `disable_config_load` is enabled)."""


class DashmapConfig(TypedDict):
    """Configuration for the `dashmap` service."""

    scheme: Required[Literal["dashmap"]]
    """The service scheme; fixed to `"dashmap"`."""
    root: NotRequired[str | os.PathLike[str]]
    """root path of this backend"""


class DropboxConfig(TypedDict):
    """Configuration for the `dropbox` service."""

    scheme: Required[Literal["dropbox"]]
    """The service scheme; fixed to `"dropbox"`."""
    access_token: NotRequired[str]
    """access token for dropbox."""
    client_id: NotRequired[str]
    """client_id for dropbox."""
    client_secret: NotRequired[str]
    """client_secret for dropbox."""
    refresh_token: NotRequired[str]
    """refresh_token for dropbox."""
    root: NotRequired[str | os.PathLike[str]]
    """root path for dropbox."""


class FsConfig(TypedDict):
    """Configuration for the `fs` service."""

    scheme: Required[Literal["fs"]]
    """The service scheme; fixed to `"fs"`."""
    atomic_write_dir: NotRequired[str | os.PathLike[str]]
    """tmp dir for atomic write"""
    root: NotRequired[str | os.PathLike[str]]
    """root dir for backend"""


class FtpConfig(TypedDict):
    """Configuration for the `ftp` service."""

    scheme: Required[Literal["ftp"]]
    """The service scheme; fixed to `"ftp"`."""
    endpoint: NotRequired[str]
    """endpoint of this backend"""
    password: NotRequired[str]
    """password of this backend"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend"""
    user: NotRequired[str]
    """user of this backend"""


class GcsConfig(TypedDict):
    """Configuration for the `gcs` service."""

    scheme: Required[Literal["gcs"]]
    """The service scheme; fixed to `"gcs"`."""
    allow_anonymous: NotRequired[bool]
    """Allow opendal to send requests without signing when credentials are not loaded. [Deprecated since 0.57.0] Please use `skip_signature` instead of `allow_anonymous`"""
    bucket: Required[str]
    """bucket name"""
    credential: NotRequired[str]
    """Credentials string for GCS service OAuth2 authentication."""
    credential_path: NotRequired[str]
    """Local path to credentials file for GCS service OAuth2 authentication."""
    default_storage_class: NotRequired[str]
    """The default storage class used by gcs."""
    disable_config_load: NotRequired[bool]
    """Disable loading configuration from the environment."""
    disable_vm_metadata: NotRequired[bool]
    """Disable attempting to load credentials from the GCE metadata server when running within Google Cloud."""
    endpoint: NotRequired[str]
    """endpoint URI of GCS service, default is `https://storage.googleapis.com`"""
    predefined_acl: NotRequired[str]
    """The predefined acl for GCS."""
    root: NotRequired[str | os.PathLike[str]]
    """root URI, all operations happens under `root`"""
    scope: NotRequired[str]
    """Scope for gcs."""
    service_account: NotRequired[str]
    """Service Account for gcs."""
    skip_signature: NotRequired[bool]
    """Skip signature will skip loading credentials and signing requests."""
    token: NotRequired[str]
    """A Google Cloud OAuth2 token.  Takes precedence over `credential` and `credential_path`."""


class GdriveConfig(TypedDict):
    """Configuration for the `gdrive` service."""

    scheme: Required[Literal["gdrive"]]
    """The service scheme; fixed to `"gdrive"`."""
    access_token: NotRequired[str]
    """Access token for gdrive."""
    client_id: NotRequired[str]
    """Client id for gdrive."""
    client_secret: NotRequired[str]
    """Client secret for gdrive."""
    refresh_token: NotRequired[str]
    """Refresh token for gdrive."""
    root: NotRequired[str | os.PathLike[str]]
    """The root for gdrive"""


class GhacConfig(TypedDict):
    """Configuration for the `ghac` service."""

    scheme: Required[Literal["ghac"]]
    """The service scheme; fixed to `"ghac"`."""
    endpoint: NotRequired[str]
    """The endpoint for ghac service."""
    root: NotRequired[str | os.PathLike[str]]
    """The root path for ghac."""
    runtime_token: NotRequired[str]
    """The runtime token for ghac service."""
    version: NotRequired[str]
    """The version that used by cache."""


class GridfsConfig(TypedDict):
    """Configuration for the `gridfs` service."""

    scheme: Required[Literal["gridfs"]]
    """The service scheme; fixed to `"gridfs"`."""
    bucket: NotRequired[str]
    """The bucket name of the MongoDB GridFs service to read/write."""
    chunk_size: NotRequired[int]
    """The chunk size of the MongoDB GridFs service used to break the user file into chunks."""
    connection_string: NotRequired[str]
    """The connection string of the MongoDB service."""
    database: NotRequired[str]
    """The database name of the MongoDB GridFs service to read/write."""
    root: NotRequired[str | os.PathLike[str]]
    """The working directory, all operations will be performed under it."""


class HdfsNativeConfig(TypedDict):
    """Configuration for the `hdfs-native` service."""

    scheme: Required[Literal["hdfs-native"]]
    """The service scheme; fixed to `"hdfs-native"`."""
    enable_append: NotRequired[bool]
    """Deprecated: HDFS Native append capability is enabled by default. [Deprecated since 0.57.0] HDFS Native append capability is enabled by default and this option is no longer needed."""
    name_node: NotRequired[str]
    """name_node of this backend"""
    options: NotRequired[dict[str, str]]
    """other options for hdfs client"""
    root: NotRequired[str | os.PathLike[str]]
    """work dir of this backend"""


class HfConfig(TypedDict):
    """Configuration for the `hf` service."""

    scheme: Required[Literal["hf"]]
    """The service scheme; fixed to `"hf"`."""
    download_mode: NotRequired[str]
    """Download mode. Either `xet` (default) or `http`.  When unset, the mode is resolved from the `HF_HUB_DISABLE_XET` environment variable: a non-empty value forces `http`, otherwise it defaults to `xet`. An explicit value here takes precedence.  See <https://huggingface.co/docs/huggingface_hub/package_reference/environment_variables#hfhubdisablexet>."""
    endpoint: NotRequired[str]
    """Endpoint of the Hugging Face Hub.  The default is `https://huggingface.co`."""
    repo_id: NotRequired[str]
    """Repo id of this backend.  This is required."""
    repo_type: NotRequired[str]
    """Repo type of this backend. Required."""
    revision: NotRequired[str]
    """Revision of this backend.  Default is main."""
    root: NotRequired[str | os.PathLike[str]]
    """Root of this backend. Can be "/path/to/dir".  Default is "/"."""
    token: NotRequired[str]
    """Token of this backend.  This is optional."""


class HttpConfig(TypedDict):
    """Configuration for the `http` service."""

    scheme: Required[Literal["http"]]
    """The service scheme; fixed to `"http"`."""
    endpoint: NotRequired[str]
    """endpoint of this backend"""
    password: NotRequired[str]
    """password of this backend"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend"""
    token: NotRequired[str]
    """token of this backend"""
    username: NotRequired[str]
    """username of this backend"""


class IpfsConfig(TypedDict):
    """Configuration for the `ipfs` service."""

    scheme: Required[Literal["ipfs"]]
    """The service scheme; fixed to `"ipfs"`."""
    endpoint: NotRequired[str]
    """IPFS gateway endpoint."""
    root: NotRequired[str | os.PathLike[str]]
    """IPFS root."""


class IpmfsConfig(TypedDict):
    """Configuration for the `ipmfs` service."""

    scheme: Required[Literal["ipmfs"]]
    """The service scheme; fixed to `"ipmfs"`."""
    endpoint: NotRequired[str]
    """Endpoint for ipfs."""
    root: NotRequired[str | os.PathLike[str]]
    """Root for ipfs."""


class KoofrConfig(TypedDict):
    """Configuration for the `koofr` service."""

    scheme: Required[Literal["koofr"]]
    """The service scheme; fixed to `"koofr"`."""
    email: Required[str]
    """Koofr email."""
    endpoint: Required[str]
    """Koofr endpoint."""
    password: NotRequired[str]
    """password of this backend. (Must be the application password)"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""


class MemcachedConfig(TypedDict):
    """Configuration for the `memcached` service."""

    scheme: Required[Literal["memcached"]]
    """The service scheme; fixed to `"memcached"`."""
    connection_pool_max_size: NotRequired[int]
    """The maximum number of connections allowed.  default is 10"""
    default_ttl: NotRequired[str]
    """The default ttl for put operations. A human readable duration string, e.g. "5s" (see https://docs.rs/humantime/latest/humantime/fn.parse_duration.html)."""
    endpoint: NotRequired[str]
    """network address of the memcached service.  For example: "tcp://localhost:11211\""""
    password: NotRequired[str]
    """Memcached password, optional."""
    root: NotRequired[str | os.PathLike[str]]
    """the working directory of the service. Can be "/path/to/dir"  default is "/\""""
    username: NotRequired[str]
    """Memcached username, optional."""


class MemoryConfig(TypedDict):
    """Configuration for the `memory` service."""

    scheme: Required[Literal["memory"]]
    """The service scheme; fixed to `"memory"`."""
    root: NotRequired[str | os.PathLike[str]]
    """root of the backend."""


class MiniMokaConfig(TypedDict):
    """Configuration for the `mini-moka` service."""

    scheme: Required[Literal["mini-moka"]]
    """The service scheme; fixed to `"mini-moka"`."""
    max_capacity: NotRequired[int]
    """Sets the max capacity of the cache.  Refer to [`mini-moka::sync::CacheBuilder::max_capacity`](https://docs.rs/mini-moka/latest/mini_moka/sync/struct.CacheBuilder.html#method.max_capacity)"""
    root: NotRequired[str | os.PathLike[str]]
    """root path of this backend"""
    time_to_idle: NotRequired[str]
    """Sets the time to idle of the cache.  Refer to [`mini-moka::sync::CacheBuilder::time_to_idle`](https://docs.rs/mini-moka/latest/mini_moka/sync/struct.CacheBuilder.html#method.time_to_idle)"""
    time_to_live: NotRequired[str]
    """Sets the time to live of the cache.  Refer to [`mini-moka::sync::CacheBuilder::time_to_live`](https://docs.rs/mini-moka/latest/mini_moka/sync/struct.CacheBuilder.html#method.time_to_live)"""


class MokaConfig(TypedDict):
    """Configuration for the `moka` service."""

    scheme: Required[Literal["moka"]]
    """The service scheme; fixed to `"moka"`."""
    max_capacity: NotRequired[int]
    """Sets the max capacity of the cache.  Refer to [`moka::future::CacheBuilder::max_capacity`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.max_capacity)"""
    name: NotRequired[str]
    """Name for this cache instance."""
    root: NotRequired[str | os.PathLike[str]]
    """root path of this backend"""
    time_to_idle: NotRequired[str]
    """Sets the time to idle of the cache.  Refer to [`moka::future::CacheBuilder::time_to_idle`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.time_to_idle)"""
    time_to_live: NotRequired[str]
    """Sets the time to live of the cache.  Refer to [`moka::future::CacheBuilder::time_to_live`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.time_to_live)"""


class MongodbConfig(TypedDict):
    """Configuration for the `mongodb` service."""

    scheme: Required[Literal["mongodb"]]
    """The service scheme; fixed to `"mongodb"`."""
    collection: NotRequired[str]
    """collection of this backend"""
    connection_string: NotRequired[str]
    """connection string of this backend"""
    database: NotRequired[str]
    """database of this backend"""
    key_field: NotRequired[str]
    """key field of this backend"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend"""
    value_field: NotRequired[str]
    """value field of this backend"""


class MysqlConfig(TypedDict):
    """Configuration for the `mysql` service."""

    scheme: Required[Literal["mysql"]]
    """The service scheme; fixed to `"mysql"`."""
    connection_string: NotRequired[str]
    """This connection string is used to connect to the mysql service. There are url based formats.  The format of connect string resembles the url format of the mysql client. The format is: `[scheme://][user[:[password]]@]host[:port][/schema][?attribute1=value1&attribute2=value2...`  - `mysql://user@localhost` - `mysql://user:password@localhost` - `mysql://user:password@localhost:3306` - `mysql://user:password@localhost:3306/db`  For more information, please refer to <https://docs.rs/sqlx/latest/sqlx/mysql/struct.MySqlConnectOptions.html>."""
    key_field: NotRequired[str]
    """The key field name for mysql."""
    root: NotRequired[str | os.PathLike[str]]
    """The root for mysql."""
    table: NotRequired[str]
    """The table name for mysql."""
    value_field: NotRequired[str]
    """The value field name for mysql."""


class ObsConfig(TypedDict):
    """Configuration for the `obs` service."""

    scheme: Required[Literal["obs"]]
    """The service scheme; fixed to `"obs"`."""
    access_key_id: NotRequired[str]
    """Access key id for obs."""
    bucket: NotRequired[str]
    """Bucket for obs."""
    enable_versioning: NotRequired[bool]
    """Deprecated: OBS versioning capability is not controlled by service config. [Deprecated since 0.57.0] OBS versioning capability is not controlled by this option and this option is no longer needed."""
    endpoint: NotRequired[str]
    """Endpoint for obs."""
    root: NotRequired[str | os.PathLike[str]]
    """Root for obs."""
    secret_access_key: NotRequired[str]
    """Secret access key for obs."""


class OnedriveConfig(TypedDict):
    """Configuration for the `onedrive` service."""

    scheme: Required[Literal["onedrive"]]
    """The service scheme; fixed to `"onedrive"`."""
    access_token: NotRequired[str]
    """Microsoft Graph API (also OneDrive API) access token"""
    client_id: NotRequired[str]
    """Microsoft Graph API Application (client) ID that is in the Azure's app registration portal"""
    client_secret: NotRequired[str]
    """Microsoft Graph API Application client secret that is in the Azure's app registration portal"""
    enable_versioning: NotRequired[bool]
    """Deprecated: OneDrive versioning capability is enabled by default. [Deprecated since 0.57.0] OneDrive versioning capability is enabled by default and this option is no longer needed."""
    refresh_token: NotRequired[str]
    """Microsoft Graph API (also OneDrive API) refresh token"""
    root: NotRequired[str | os.PathLike[str]]
    """The root path for the OneDrive service for the file access"""


class OssConfig(TypedDict):
    """Configuration for the `oss` service."""

    scheme: Required[Literal["oss"]]
    """The service scheme; fixed to `"oss"`."""
    access_key_id: NotRequired[str]
    """Access key id for oss.  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_ACCESS_KEY_ID`"""
    access_key_secret: NotRequired[str]
    """Access key secret for oss.  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_ACCESS_KEY_SECRET`"""
    addressing_style: NotRequired[str]
    """Addressing style for oss."""
    allow_anonymous: NotRequired[bool]
    """Allow anonymous for oss. [Deprecated since 0.57.0] Please use `skip_signature` instead of `allow_anonymous`"""
    batch_max_operations: NotRequired[int]
    """Deprecated: OSS delete batch capability is enabled by default. [Deprecated since 0.57.0] OSS delete batch capability is enabled by default. Use CapabilityOverrideLayer to override delete_max_size for specific endpoints."""
    bucket: Required[str]
    """Bucket for oss."""
    delete_max_size: NotRequired[int]
    """Deprecated: OSS delete batch capability is enabled by default. [Deprecated since 0.57.0] OSS delete batch capability is enabled by default. Use CapabilityOverrideLayer to override delete_max_size for specific endpoints."""
    enable_versioning: NotRequired[bool]
    """Deprecated: OSS versioning capability is enabled by default. [Deprecated since 0.57.0] OSS versioning capability is enabled by default and this option is no longer needed."""
    endpoint: NotRequired[str]
    """Endpoint for oss."""
    external_id: NotRequired[str]
    """external_id for this backend."""
    oidc_provider_arn: NotRequired[str]
    """`oidc_provider_arn` will be loaded from  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_OIDC_PROVIDER_ARN`"""
    oidc_token_file: NotRequired[str]
    """`oidc_token_file` will be loaded from  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_OIDC_TOKEN_FILE`"""
    presign_addressing_style: NotRequired[str]
    """Pre sign addressing style for oss."""
    presign_endpoint: NotRequired[str]
    """Presign endpoint for oss."""
    role_arn: NotRequired[str]
    """If `role_arn` is set, we will use already known config as source credential to assume role with `role_arn`.  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_ROLE_ARN`"""
    role_session_name: NotRequired[str]
    """role_session_name for this backend."""
    root: NotRequired[str | os.PathLike[str]]
    """Root for oss."""
    security_token: NotRequired[str]
    """`security_token` will be loaded from  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_SECURITY_TOKEN`"""
    server_side_encryption: NotRequired[str]
    """Server side encryption for oss."""
    server_side_encryption_key_id: NotRequired[str]
    """Server side encryption key id for oss."""
    skip_signature: NotRequired[bool]
    """Skip signature will skip loading credentials and signing requests."""
    sts_endpoint: NotRequired[str]
    """`sts_endpoint` will be loaded from  - this field if it's `is_some` - env value: `ALIBABA_CLOUD_STS_ENDPOINT`"""


class PersyConfig(TypedDict):
    """Configuration for the `persy` service."""

    scheme: Required[Literal["persy"]]
    """The service scheme; fixed to `"persy"`."""
    datafile: NotRequired[str]
    """That path to the persy data file. The directory in the path must already exist."""
    index: NotRequired[str]
    """That name of the persy index."""
    segment: NotRequired[str]
    """That name of the persy segment."""


class PostgresqlConfig(TypedDict):
    """Configuration for the `postgresql` service."""

    scheme: Required[Literal["postgresql"]]
    """The service scheme; fixed to `"postgresql"`."""
    connection_string: NotRequired[str]
    """The URL should be with a scheme of either `postgres://` or `postgresql://`.  - `postgresql://user@localhost` - `postgresql://user:password@%2Fvar%2Flib%2Fpostgresql/mydb?connect_timeout=10` - `postgresql://user@host1:1234,host2,host3:5678?target_session_attrs=read-write` - `postgresql:///mydb?user=user&host=/var/lib/postgresql`  For more information, please visit <https://docs.rs/sqlx/latest/sqlx/postgres/struct.PgConnectOptions.html>."""
    key_field: NotRequired[str]
    """the key field of postgresql"""
    root: NotRequired[str | os.PathLike[str]]
    """Root of this backend.  All operations will happen under this root.  Default to `/` if not set."""
    table: NotRequired[str]
    """the table of postgresql"""
    value_field: NotRequired[str]
    """the value field of postgresql"""


class RedbConfig(TypedDict):
    """Configuration for the `redb` service."""

    scheme: Required[Literal["redb"]]
    """The service scheme; fixed to `"redb"`."""
    datadir: NotRequired[str]
    """path to the redb data directory."""
    root: NotRequired[str | os.PathLike[str]]
    """The root for redb."""
    table: NotRequired[str]
    """The table name for redb."""


class RedisConfig(TypedDict):
    """Configuration for the `redis` service."""

    scheme: Required[Literal["redis"]]
    """The service scheme; fixed to `"redis"`."""
    cluster_endpoints: NotRequired[str]
    """network address of the Redis cluster service. Can be "tcp://127.0.0.1:6379,tcp://127.0.0.1:6380,tcp://127.0.0.1:6381", e.g.  default is None"""
    connection_pool_max_size: NotRequired[int]
    """The maximum number of connections allowed.  default is 10"""
    db: Required[int]
    """the number of DBs redis can take is unlimited  default is db 0"""
    default_ttl: NotRequired[str]
    """The default ttl for put operations. A human readable duration string, e.g. "5s" (see https://docs.rs/humantime/latest/humantime/fn.parse_duration.html)."""
    endpoint: NotRequired[str]
    """network address of the Redis service. Can be "tcp://127.0.0.1:6379", e.g.  default is "tcp://127.0.0.1:6379\""""
    password: NotRequired[str]
    """the password for authentication  default is None"""
    root: NotRequired[str | os.PathLike[str]]
    """the working directory of the Redis service. Can be "/path/to/dir"  default is "/\""""
    username: NotRequired[str]
    """the username to connect redis service.  default is None"""


class S3Config(TypedDict):
    """Configuration for the `s3` service."""

    scheme: Required[Literal["s3"]]
    """The service scheme; fixed to `"s3"`."""
    access_key_id: NotRequired[str]
    """access_key_id of this backend.  - If access_key_id is set, we will take user's input first. - If not, we will try to load it from environment."""
    allow_anonymous: NotRequired[bool]
    """Allow anonymous will allow opendal to send request without signing when credential is not loaded. [Deprecated since 0.57.0] Please use `skip_signature` instead of `allow_anonymous`"""
    assume_role_duration_seconds: NotRequired[int]
    """assume_role_duration_seconds for this backend."""
    assume_role_session_tags: NotRequired[dict[str, str]]
    """assume_role_session_tags for this backend."""
    batch_max_operations: NotRequired[int]
    """Deprecated: S3 delete batch capability is enabled by default. [Deprecated since 0.57.0] S3 delete batch capability is enabled by default. Use CapabilityOverrideLayer to override delete_max_size for specific endpoints."""
    bucket: Required[str]
    """bucket name of this backend.  required."""
    checksum_algorithm: NotRequired[str]
    """Checksum Algorithm to use when sending checksums in HTTP headers. This is necessary when writing to AWS S3 Buckets with Object Lock enabled for example.  Available options: - "crc32c" - "md5\""""
    default_acl: NotRequired[str]
    """Default ACL for new objects. Note that some s3 services like minio do not support this option."""
    default_storage_class: NotRequired[str]
    """default storage_class for this backend.  Available values: - `DEEP_ARCHIVE` - `GLACIER` - `GLACIER_IR` - `INTELLIGENT_TIERING` - `ONEZONE_IA` - `EXPRESS_ONEZONE` - `OUTPOSTS` - `REDUCED_REDUNDANCY` - `STANDARD` - `STANDARD_IA`  S3 compatible services don't support all of them"""
    delete_max_size: NotRequired[int]
    """Deprecated: S3 delete batch capability is enabled by default. [Deprecated since 0.57.0] S3 delete batch capability is enabled by default. Use CapabilityOverrideLayer to override delete_max_size for specific endpoints."""
    disable_config_load: NotRequired[bool]
    """Disable config load so that opendal will not load config from environment.  For examples:  - envs like `AWS_ACCESS_KEY_ID` - files like `~/.aws/config`"""
    disable_ec2_metadata: NotRequired[bool]
    """Disable load credential from ec2 metadata.  This option is used to disable the default behavior of opendal to load credential from ec2 metadata, a.k.a., IMDSv2"""
    disable_list_objects_v2: NotRequired[bool]
    """OpenDAL uses List Objects V2 by default to list objects. However, some legacy services do not yet support V2. This option allows users to switch back to the older List Objects V1."""
    disable_stat_with_override: NotRequired[bool]
    """Deprecated: S3 stat override capabilities are enabled by default. [Deprecated since 0.57.0] S3 stat override capabilities are enabled by default. Use CapabilityOverrideLayer to override them for specific endpoints."""
    disable_write_with_if_match: NotRequired[bool]
    """Deprecated: S3 write with If-Match capability is enabled by default. [Deprecated since 0.57.0] S3 write with If-Match capability is enabled by default and this option is no longer needed."""
    enable_request_payer: NotRequired[bool]
    """Indicates whether the client agrees to pay for the requests made to the S3 bucket."""
    enable_versioning: NotRequired[bool]
    """Deprecated: S3 versioning capability is enabled by default. [Deprecated since 0.57.0] S3 versioning capability is enabled by default and this option is no longer needed."""
    enable_virtual_host_style: NotRequired[bool]
    """Enable virtual host style so that opendal will send API requests in virtual host style instead of path style.  - By default, opendal will send API to `https://s3.us-east-1.amazonaws.com/bucket_name` - Enabled, opendal will send API to `https://bucket_name.s3.us-east-1.amazonaws.com`"""
    enable_write_with_append: NotRequired[bool]
    """Deprecated: S3 append capability is enabled by default. [Deprecated since 0.57.0] S3 append capability is enabled by default and this option is no longer needed."""
    endpoint: NotRequired[str]
    """endpoint of this backend.  Endpoint must be full uri, e.g.  - AWS S3: `https://s3.amazonaws.com` or `https://s3.{region}.amazonaws.com` - Cloudflare R2: `https://<ACCOUNT_ID>.r2.cloudflarestorage.com` - Aliyun OSS: `https://{region}.aliyuncs.com` - Tencent COS: `https://cos.{region}.myqcloud.com` - Minio: `http://127.0.0.1:9000`  If user inputs endpoint without scheme like "s3.amazonaws.com", we will prepend "https://" before it.  - If endpoint is set, we will take user's input first. - If not, we will try to load it from environment. - If still not set, default to `https://s3.amazonaws.com`."""
    external_id: NotRequired[str]
    """external_id for this backend."""
    profile: NotRequired[str]
    """AWS profile.  By default, reqsign which is the default credential provider, supplies profile in order: - explicit option - `AWS_PROFILE` environment variable, from which reqsign reads profile from: - `~/.aws/credentials` (or the path specified by `AWS_SHARED_CREDENTIALS_FILE`) - `~/.aws/config` (or the path specified by `AWS_CONFIG_FILE`)"""
    region: NotRequired[str]
    """Region represent the signing region of this endpoint. This is required if you are using the default AWS S3 endpoint.  If using a custom endpoint, - If region is set, we will take user's input first. - If not, we will try to load it from environment."""
    role_arn: NotRequired[str]
    """role_arn for this backend.  If `role_arn` is set, we will use already known config as source credential to assume role with `role_arn`."""
    role_session_name: NotRequired[str]
    """role_session_name for this backend."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root.  default to `/` if not set."""
    secret_access_key: NotRequired[str]
    """secret_access_key of this backend.  - If secret_access_key is set, we will take user's input first. - If not, we will try to load it from environment."""
    server_side_encryption: NotRequired[str]
    """server_side_encryption for this backend.  Available values: `AES256`, `aws:kms`."""
    server_side_encryption_aws_kms_key_id: NotRequired[str]
    """server_side_encryption_aws_kms_key_id for this backend  - If `server_side_encryption` set to `aws:kms`, and `server_side_encryption_aws_kms_key_id` is not set, S3 will use aws managed kms key to encrypt data. - If `server_side_encryption` set to `aws:kms`, and `server_side_encryption_aws_kms_key_id` is a valid kms key id, S3 will use the provided kms key to encrypt data. - If the `server_side_encryption_aws_kms_key_id` is invalid or not found, an error will be returned. - If `server_side_encryption` is not `aws:kms`, setting `server_side_encryption_aws_kms_key_id` is a noop."""
    server_side_encryption_customer_algorithm: NotRequired[str]
    """server_side_encryption_customer_algorithm for this backend.  Available values: `AES256`."""
    server_side_encryption_customer_key: NotRequired[str]
    """server_side_encryption_customer_key for this backend.  Value: BASE64-encoded key that matches algorithm specified in `server_side_encryption_customer_algorithm`."""
    server_side_encryption_customer_key_md5: NotRequired[str]
    """Set server_side_encryption_customer_key_md5 for this backend.  Value: MD5 digest of key specified in `server_side_encryption_customer_key`."""
    session_token: NotRequired[str]
    """session_token (aka, security token) of this backend.  This token will expire after sometime, it's recommended to set session_token by hand."""
    skip_signature: NotRequired[bool]
    """Skip signature will skip loading credentials and signing requests."""


class SeafileConfig(TypedDict):
    """Configuration for the `seafile` service."""

    scheme: Required[Literal["seafile"]]
    """The service scheme; fixed to `"seafile"`."""
    endpoint: NotRequired[str]
    """endpoint address of this backend."""
    password: NotRequired[str]
    """password of this backend."""
    repo_name: Required[str]
    """repo_name of this backend.  required."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""
    username: NotRequired[str]
    """username of this backend."""


class SftpConfig(TypedDict):
    """Configuration for the `sftp` service."""

    scheme: Required[Literal["sftp"]]
    """The service scheme; fixed to `"sftp"`."""
    enable_copy: NotRequired[bool]
    """Deprecated: SFTP copy capability is enabled by default. [Deprecated since 0.57.0] SFTP copy capability is enabled by default and this option is no longer needed."""
    endpoint: NotRequired[str]
    """endpoint of this backend"""
    key: NotRequired[str]
    """key of this backend"""
    known_hosts_strategy: NotRequired[str]
    """known_hosts_strategy of this backend"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend"""
    user: NotRequired[str]
    """user of this backend"""


class SledConfig(TypedDict):
    """Configuration for the `sled` service."""

    scheme: Required[Literal["sled"]]
    """The service scheme; fixed to `"sled"`."""
    datadir: NotRequired[str]
    """That path to the sled data directory."""
    root: NotRequired[str | os.PathLike[str]]
    """The root for sled."""
    tree: NotRequired[str]
    """The tree for sled."""


class SqliteConfig(TypedDict):
    """Configuration for the `sqlite` service."""

    scheme: Required[Literal["sqlite"]]
    """The service scheme; fixed to `"sqlite"`."""
    connection_string: NotRequired[str]
    """Set the connection_string of the sqlite service.  This connection string is used to connect to the sqlite service.  The format of connect string resembles the url format of the sqlite client:  - `sqlite::memory:` - `sqlite:data.db` - `sqlite://data.db`  For more information, please visit <https://docs.rs/sqlx/latest/sqlx/sqlite/struct.SqliteConnectOptions.html>."""
    key_field: NotRequired[str]
    """Set the key field name of the sqlite service to read/write.  Default to `key` if not specified."""
    root: NotRequired[str | os.PathLike[str]]
    """set the working directory, all operations will be performed under it.  default: "/\""""
    table: NotRequired[str]
    """Set the table name of the sqlite service to read/write."""
    value_field: NotRequired[str]
    """Set the value field name of the sqlite service to read/write.  Default to `value` if not specified."""


class SwiftConfig(TypedDict):
    """Configuration for the `swift` service."""

    scheme: Required[Literal["swift"]]
    """The service scheme; fixed to `"swift"`."""
    container: NotRequired[str]
    """The container for Swift."""
    endpoint: NotRequired[str]
    """The endpoint for Swift."""
    root: NotRequired[str | os.PathLike[str]]
    """The root for Swift."""
    temp_url_hash_algorithm: NotRequired[str]
    """The hash algorithm for TempURL signing.  Supported values: `sha1`, `sha256`, `sha512`. Defaults to `sha256`. The cluster must have the chosen algorithm in its `tempurl.allowed_digests` (check `GET /info`)."""
    temp_url_key: NotRequired[str]
    """The TempURL key for generating presigned URLs.  This corresponds to the `X-Account-Meta-Temp-URL-Key` or `X-Container-Meta-Temp-URL-Key` header value configured on the Swift account or container."""
    token: NotRequired[str]
    """The token for Swift."""


class TosConfig(TypedDict):
    """Configuration for the `tos` service."""

    scheme: Required[Literal["tos"]]
    """The service scheme; fixed to `"tos"`."""
    access_key_id: NotRequired[str]
    """access_key_id of this backend.  - If access_key_id is set, we will take user's input first. - If not, we will try to load it from environment."""
    bucket: Required[str]
    """bucket name of this backend.  required."""
    disable_config_load: NotRequired[bool]
    """Disable config load so that opendal will not load config from environment.  For examples: - envs like `TOS_ACCESS_KEY_ID`"""
    endpoint: NotRequired[str]
    """endpoint of this backend.  Endpoint must be full uri, e.g. - TOS: `https://tos-cn-beijing.volces.com` - TOS with region: `https://tos-{region}.volces.com`  If user inputs endpoint without scheme like "tos-cn-beijing.volces.com", we will prepend "https://" before it."""
    region: NotRequired[str]
    """Region represent the signing region of this endpoint.  Required if endpoint is not provided.  - If region is set, we will take user's input first. - If not, we will try to load it from environment. - If still not set, default to `cn-beijing`."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root.  default to `/` if not set."""
    secret_access_key: NotRequired[str]
    """secret_access_key of this backend.  - If secret_access_key is set, we will take user's input first. - If not, we will try to load it from environment."""
    security_token: NotRequired[str]
    """security_token of this backend.  This token will expire after sometime, it's recommended to set security_token by hand."""
    skip_signature: NotRequired[bool]
    """Skip signature will skip loading credentials and signing requests."""


class UpyunConfig(TypedDict):
    """Configuration for the `upyun` service."""

    scheme: Required[Literal["upyun"]]
    """The service scheme; fixed to `"upyun"`."""
    bucket: Required[str]
    """bucket address of this backend."""
    operator: NotRequired[str]
    """username of this backend."""
    password: NotRequired[str]
    """password of this backend."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""


class VercelArtifactsConfig(TypedDict):
    """Configuration for the `vercel-artifacts` service."""

    scheme: Required[Literal["vercel-artifacts"]]
    """The service scheme; fixed to `"vercel-artifacts"`."""
    access_token: NotRequired[str]
    """The access token for Vercel."""
    endpoint: NotRequired[str]
    """The endpoint for the Vercel artifacts API.  Defaults to `https://api.vercel.com`."""
    team_id: NotRequired[str]
    """The Vercel team ID. When set, the `teamId` query parameter is appended to all API requests."""
    team_slug: NotRequired[str]
    """The Vercel team slug. When set, the `slug` query parameter is appended to all API requests."""


class VercelBlobConfig(TypedDict):
    """Configuration for the `vercel-blob` service."""

    scheme: Required[Literal["vercel-blob"]]
    """The service scheme; fixed to `"vercel-blob"`."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""
    token: NotRequired[str]
    """vercel blob token."""


class WebdavConfig(TypedDict):
    """Configuration for the `webdav` service."""

    scheme: Required[Literal["webdav"]]
    """The service scheme; fixed to `"webdav"`."""
    disable_copy: NotRequired[bool]
    """Deprecated: WebDAV copy capability is enabled by default. [Deprecated since 0.57.0] WebDAV copy capability is enabled by default and this option is no longer needed."""
    disable_create_dir: NotRequired[bool]
    """Disable automatic parent directory creation before write operations.  By default, OpenDAL creates parent directories using MKCOL before writing files. This requires PROPFIND support to check directory existence.  Some WebDAV-compatible servers (e.g., bazel-remote) don't support PROPFIND or don't require explicit directory creation. Enable this option to skip the MKCOL calls and write files directly.  Default: false"""
    enable_conditional_read: NotRequired[bool]
    """Enable conditional read support.  When enabled (the default), OpenDAL forwards the RFC 7232 headers `If-Match`, `If-None-Match`, `If-Modified-Since` and `If-Unmodified-Since` to the server when callers provide them.  Some WebDAV-compatible servers (e.g., nginx-dav) don't return ETags in PROPFIND or don't honor these headers on GET. Setting this to `false` drops the four `read_with_if_*` capabilities, so calls like `reader_with(path).if_match(...)` return `ErrorKind::Unsupported` locally instead of being silently ignored by the server.  Default: true"""
    enable_user_metadata: NotRequired[bool]
    """Deprecated: WebDAV user metadata capability is enabled by default. [Deprecated since 0.57.0] WebDAV user metadata capability is enabled by default. Use CapabilityOverrideLayer to override write_with_user_metadata for endpoints without PROPPATCH support."""
    endpoint: NotRequired[str]
    """endpoint of this backend"""
    password: NotRequired[str]
    """password of this backend"""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend"""
    token: NotRequired[str]
    """token of this backend"""
    user_metadata_prefix: NotRequired[str]
    """The XML namespace prefix for user metadata properties.  This prefix is used in PROPPATCH/PROPFIND XML requests. Different servers may require different prefixes.  Default: "opendal\""""
    user_metadata_uri: NotRequired[str]
    """The XML namespace URI for user metadata properties.  This URI uniquely identifies the namespace for custom properties. Different servers may require different namespace URIs. For example, Nextcloud might work better with its own namespace.  Default: `https://opendal.apache.org/ns`"""
    username: NotRequired[str]
    """username of this backend"""


class WebhdfsConfig(TypedDict):
    """Configuration for the `webhdfs` service."""

    scheme: Required[Literal["webhdfs"]]
    """The service scheme; fixed to `"webhdfs"`."""
    atomic_write_dir: NotRequired[str | os.PathLike[str]]
    """atomic_write_dir of this backend"""
    delegation: NotRequired[str]
    """Delegation token for webhdfs."""
    disable_list_batch: NotRequired[bool]
    """Disable batch listing"""
    endpoint: NotRequired[str]
    """Endpoint for webhdfs."""
    root: NotRequired[str | os.PathLike[str]]
    """Root for webhdfs."""
    user_name: NotRequired[str]
    """Name of the user for webhdfs."""


class YandexDiskConfig(TypedDict):
    """Configuration for the `yandex-disk` service."""

    scheme: Required[Literal["yandex-disk"]]
    """The service scheme; fixed to `"yandex-disk"`."""
    access_token: Required[str]
    """yandex disk oauth access_token."""
    root: NotRequired[str | os.PathLike[str]]
    """root of this backend.  All operations will happen under this root."""


ServiceConfig = (
    AliyunDriveConfig
    | AlluxioConfig
    | AzblobConfig
    | AzdlsConfig
    | AzfileConfig
    | B2Config
    | CacacheConfig
    | CloudflareKvConfig
    | CosConfig
    | DashmapConfig
    | DropboxConfig
    | FsConfig
    | FtpConfig
    | GcsConfig
    | GdriveConfig
    | GhacConfig
    | GridfsConfig
    | HdfsNativeConfig
    | HfConfig
    | HttpConfig
    | IpfsConfig
    | IpmfsConfig
    | KoofrConfig
    | MemcachedConfig
    | MemoryConfig
    | MiniMokaConfig
    | MokaConfig
    | MongodbConfig
    | MysqlConfig
    | ObsConfig
    | OnedriveConfig
    | OssConfig
    | PersyConfig
    | PostgresqlConfig
    | RedbConfig
    | RedisConfig
    | S3Config
    | SeafileConfig
    | SftpConfig
    | SledConfig
    | SqliteConfig
    | SwiftConfig
    | TosConfig
    | UpyunConfig
    | VercelArtifactsConfig
    | VercelBlobConfig
    | WebdavConfig
    | WebhdfsConfig
    | YandexDiskConfig
)
"""Discriminated union of every service configuration, keyed on `scheme`."""

__all__ = [
    "ServiceConfig",
    "AliyunDriveConfig",
    "AlluxioConfig",
    "AzblobConfig",
    "AzdlsConfig",
    "AzfileConfig",
    "B2Config",
    "CacacheConfig",
    "CloudflareKvConfig",
    "CosConfig",
    "DashmapConfig",
    "DropboxConfig",
    "FsConfig",
    "FtpConfig",
    "GcsConfig",
    "GdriveConfig",
    "GhacConfig",
    "GridfsConfig",
    "HdfsNativeConfig",
    "HfConfig",
    "HttpConfig",
    "IpfsConfig",
    "IpmfsConfig",
    "KoofrConfig",
    "MemcachedConfig",
    "MemoryConfig",
    "MiniMokaConfig",
    "MokaConfig",
    "MongodbConfig",
    "MysqlConfig",
    "ObsConfig",
    "OnedriveConfig",
    "OssConfig",
    "PersyConfig",
    "PostgresqlConfig",
    "RedbConfig",
    "RedisConfig",
    "S3Config",
    "SeafileConfig",
    "SftpConfig",
    "SledConfig",
    "SqliteConfig",
    "SwiftConfig",
    "TosConfig",
    "UpyunConfig",
    "VercelArtifactsConfig",
    "VercelBlobConfig",
    "WebdavConfig",
    "WebhdfsConfig",
    "YandexDiskConfig",
]
