opendal 0.1.6.pre.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.standard.yml +20 -0
- data/.tool-versions +1 -0
- data/.yardopts +1 -0
- data/Cargo.toml +65 -0
- data/DEPENDENCIES.md +9 -0
- data/DEPENDENCIES.rust.tsv +277 -0
- data/Gemfile +35 -0
- data/README.md +159 -0
- data/Rakefile +149 -0
- data/build.rs +22 -0
- data/core/CHANGELOG.md +4929 -0
- data/core/CONTRIBUTING.md +61 -0
- data/core/Cargo.lock +10259 -0
- data/core/Cargo.toml +437 -0
- data/core/DEPENDENCIES.md +3 -0
- data/core/DEPENDENCIES.rust.tsv +185 -0
- data/core/LICENSE +201 -0
- data/core/README.md +228 -0
- data/core/benches/README.md +18 -0
- data/core/benches/ops/README.md +26 -0
- data/core/benches/ops/main.rs +25 -0
- data/core/benches/ops/read.rs +100 -0
- data/core/benches/ops/utils.rs +59 -0
- data/core/benches/ops/write.rs +106 -0
- data/core/benches/types/README.md +9 -0
- data/core/benches/types/buffer.rs +114 -0
- data/core/benches/types/main.rs +23 -0
- data/core/benches/types/tasks.rs +64 -0
- data/core/benches/vs_fs/Cargo.toml +32 -0
- data/core/benches/vs_fs/README.md +35 -0
- data/core/benches/vs_fs/src/main.rs +83 -0
- data/core/benches/vs_s3/Cargo.toml +38 -0
- data/core/benches/vs_s3/README.md +55 -0
- data/core/benches/vs_s3/src/main.rs +123 -0
- data/core/edge/README.md +3 -0
- data/core/edge/file_write_on_full_disk/Cargo.toml +31 -0
- data/core/edge/file_write_on_full_disk/README.md +14 -0
- data/core/edge/file_write_on_full_disk/src/main.rs +43 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/Cargo.toml +30 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/src/main.rs +34 -0
- data/core/edge/s3_read_on_wasm/.gitignore +3 -0
- data/core/edge/s3_read_on_wasm/Cargo.toml +38 -0
- data/core/edge/s3_read_on_wasm/README.md +42 -0
- data/core/edge/s3_read_on_wasm/src/lib.rs +60 -0
- data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
- data/core/examples/README.md +23 -0
- data/core/examples/basic/Cargo.toml +29 -0
- data/core/examples/basic/README.md +15 -0
- data/core/examples/basic/src/main.rs +51 -0
- data/core/examples/concurrent-upload/Cargo.toml +29 -0
- data/core/examples/concurrent-upload/README.md +15 -0
- data/core/examples/concurrent-upload/src/main.rs +68 -0
- data/core/examples/multipart-upload/Cargo.toml +29 -0
- data/core/examples/multipart-upload/README.md +15 -0
- data/core/examples/multipart-upload/src/main.rs +56 -0
- data/core/fuzz/.gitignore +5 -0
- data/core/fuzz/Cargo.toml +92 -0
- data/core/fuzz/README.md +68 -0
- data/core/fuzz/fuzz_reader.rs +102 -0
- data/core/fuzz/fuzz_writer.rs +123 -0
- data/core/src/blocking/delete.rs +74 -0
- data/core/src/blocking/list.rs +71 -0
- data/core/src/blocking/mod.rs +33 -0
- data/core/src/blocking/operator.rs +729 -0
- data/core/src/blocking/read/buffer_iterator.rs +66 -0
- data/core/src/blocking/read/mod.rs +27 -0
- data/core/src/blocking/read/reader.rs +124 -0
- data/core/src/blocking/read/std_bytes_iterator.rs +69 -0
- data/core/src/blocking/read/std_reader.rs +95 -0
- data/core/src/blocking/write/mod.rs +22 -0
- data/core/src/blocking/write/std_writer.rs +82 -0
- data/core/src/blocking/write/writer.rs +109 -0
- data/core/src/docs/comparisons/mod.rs +30 -0
- data/core/src/docs/comparisons/vs_object_store.md +183 -0
- data/core/src/docs/concepts.rs +135 -0
- data/core/src/docs/internals/accessor.rs +306 -0
- data/core/src/docs/internals/layer.rs +42 -0
- data/core/src/docs/internals/mod.rs +62 -0
- data/core/src/docs/mod.rs +43 -0
- data/core/src/docs/performance/concurrent_write.md +101 -0
- data/core/src/docs/performance/http_optimization.md +124 -0
- data/core/src/docs/performance/mod.rs +32 -0
- data/core/src/docs/rfcs/0000_example.md +74 -0
- data/core/src/docs/rfcs/0000_foyer_integration.md +111 -0
- data/core/src/docs/rfcs/0041_object_native_api.md +185 -0
- data/core/src/docs/rfcs/0044_error_handle.md +198 -0
- data/core/src/docs/rfcs/0057_auto_region.md +160 -0
- data/core/src/docs/rfcs/0069_object_stream.md +145 -0
- data/core/src/docs/rfcs/0090_limited_reader.md +155 -0
- data/core/src/docs/rfcs/0112_path_normalization.md +79 -0
- data/core/src/docs/rfcs/0191_async_streaming_io.md +328 -0
- data/core/src/docs/rfcs/0203_remove_credential.md +96 -0
- data/core/src/docs/rfcs/0221_create_dir.md +89 -0
- data/core/src/docs/rfcs/0247_retryable_error.md +87 -0
- data/core/src/docs/rfcs/0293_object_id.md +67 -0
- data/core/src/docs/rfcs/0337_dir_entry.md +191 -0
- data/core/src/docs/rfcs/0409_accessor_capabilities.md +67 -0
- data/core/src/docs/rfcs/0413_presign.md +154 -0
- data/core/src/docs/rfcs/0423_command_line_interface.md +268 -0
- data/core/src/docs/rfcs/0429_init_from_iter.md +107 -0
- data/core/src/docs/rfcs/0438_multipart.md +163 -0
- data/core/src/docs/rfcs/0443_gateway.md +73 -0
- data/core/src/docs/rfcs/0501_new_builder.md +111 -0
- data/core/src/docs/rfcs/0554_write_refactor.md +96 -0
- data/core/src/docs/rfcs/0561_list_metadata_reuse.md +210 -0
- data/core/src/docs/rfcs/0599_blocking_api.md +157 -0
- data/core/src/docs/rfcs/0623_redis_service.md +300 -0
- data/core/src/docs/rfcs/0627_split_capabilities.md +89 -0
- data/core/src/docs/rfcs/0661_path_in_accessor.md +126 -0
- data/core/src/docs/rfcs/0793_generic_kv_services.md +209 -0
- data/core/src/docs/rfcs/0926_object_reader.md +93 -0
- data/core/src/docs/rfcs/0977_refactor_error.md +151 -0
- data/core/src/docs/rfcs/1085_object_handler.md +73 -0
- data/core/src/docs/rfcs/1391_object_metadataer.md +110 -0
- data/core/src/docs/rfcs/1398_query_based_metadata.md +125 -0
- data/core/src/docs/rfcs/1420_object_writer.md +147 -0
- data/core/src/docs/rfcs/1477_remove_object_concept.md +159 -0
- data/core/src/docs/rfcs/1735_operation_extension.md +117 -0
- data/core/src/docs/rfcs/2083_writer_sink_api.md +106 -0
- data/core/src/docs/rfcs/2133_append_api.md +88 -0
- data/core/src/docs/rfcs/2299_chain_based_operator_api.md +99 -0
- data/core/src/docs/rfcs/2602_object_versioning.md +138 -0
- data/core/src/docs/rfcs/2758_merge_append_into_write.md +79 -0
- data/core/src/docs/rfcs/2774_lister_api.md +66 -0
- data/core/src/docs/rfcs/2779_list_with_metakey.md +143 -0
- data/core/src/docs/rfcs/2852_native_capability.md +58 -0
- data/core/src/docs/rfcs/2884_merge_range_read_into_read.md +80 -0
- data/core/src/docs/rfcs/3017_remove_write_copy_from.md +94 -0
- data/core/src/docs/rfcs/3197_config.md +237 -0
- data/core/src/docs/rfcs/3232_align_list_api.md +69 -0
- data/core/src/docs/rfcs/3243_list_prefix.md +128 -0
- data/core/src/docs/rfcs/3356_lazy_reader.md +111 -0
- data/core/src/docs/rfcs/3526_list_recursive.md +59 -0
- data/core/src/docs/rfcs/3574_concurrent_stat_in_list.md +80 -0
- data/core/src/docs/rfcs/3734_buffered_reader.md +64 -0
- data/core/src/docs/rfcs/3898_concurrent_writer.md +66 -0
- data/core/src/docs/rfcs/3911_deleter_api.md +165 -0
- data/core/src/docs/rfcs/4382_range_based_read.md +213 -0
- data/core/src/docs/rfcs/4638_executor.md +215 -0
- data/core/src/docs/rfcs/5314_remove_metakey.md +120 -0
- data/core/src/docs/rfcs/5444_operator_from_uri.md +162 -0
- data/core/src/docs/rfcs/5479_context.md +140 -0
- data/core/src/docs/rfcs/5485_conditional_reader.md +112 -0
- data/core/src/docs/rfcs/5495_list_with_deleted.md +81 -0
- data/core/src/docs/rfcs/5556_write_returns_metadata.md +121 -0
- data/core/src/docs/rfcs/5871_read_returns_metadata.md +112 -0
- data/core/src/docs/rfcs/6189_remove_native_blocking.md +106 -0
- data/core/src/docs/rfcs/6209_glob_support.md +132 -0
- data/core/src/docs/rfcs/6213_options_api.md +142 -0
- data/core/src/docs/rfcs/README.md +62 -0
- data/core/src/docs/rfcs/mod.rs +278 -0
- data/core/src/docs/upgrade.md +1556 -0
- data/core/src/layers/async_backtrace.rs +174 -0
- data/core/src/layers/await_tree.rs +202 -0
- data/core/src/layers/capability_check.rs +239 -0
- data/core/src/layers/chaos.rs +170 -0
- data/core/src/layers/complete.rs +385 -0
- data/core/src/layers/concurrent_limit.rs +322 -0
- data/core/src/layers/correctness_check.rs +440 -0
- data/core/src/layers/dtrace.rs +294 -0
- data/core/src/layers/error_context.rs +310 -0
- data/core/src/layers/fastmetrics.rs +525 -0
- data/core/src/layers/fastrace.rs +271 -0
- data/core/src/layers/http_client.rs +206 -0
- data/core/src/layers/immutable_index.rs +408 -0
- data/core/src/layers/logging.rs +842 -0
- data/core/src/layers/metrics.rs +182 -0
- data/core/src/layers/mime_guess.rs +199 -0
- data/core/src/layers/mod.rs +130 -0
- data/core/src/layers/observe/metrics.rs +936 -0
- data/core/src/layers/observe/mod.rs +93 -0
- data/core/src/layers/otelmetrics.rs +496 -0
- data/core/src/layers/oteltrace.rs +203 -0
- data/core/src/layers/prometheus.rs +686 -0
- data/core/src/layers/prometheus_client.rs +519 -0
- data/core/src/layers/retry.rs +933 -0
- data/core/src/layers/throttle.rs +204 -0
- data/core/src/layers/timeout.rs +513 -0
- data/core/src/layers/tracing.rs +349 -0
- data/core/src/layers/type_eraser.rs +91 -0
- data/core/src/lib.rs +204 -0
- data/core/src/raw/accessor.rs +856 -0
- data/core/src/raw/adapters/kv/api.rs +164 -0
- data/core/src/raw/adapters/kv/backend.rs +253 -0
- data/core/src/raw/adapters/kv/mod.rs +31 -0
- data/core/src/raw/adapters/mod.rs +50 -0
- data/core/src/raw/adapters/typed_kv/api.rs +171 -0
- data/core/src/raw/adapters/typed_kv/backend.rs +279 -0
- data/core/src/raw/adapters/typed_kv/mod.rs +29 -0
- data/core/src/raw/atomic_util.rs +57 -0
- data/core/src/raw/azure.rs +570 -0
- data/core/src/raw/chrono_util.rs +109 -0
- data/core/src/raw/enum_utils.rs +201 -0
- data/core/src/raw/futures_util.rs +470 -0
- data/core/src/raw/http_util/body.rs +144 -0
- data/core/src/raw/http_util/bytes_content_range.rs +239 -0
- data/core/src/raw/http_util/bytes_range.rs +260 -0
- data/core/src/raw/http_util/client.rs +276 -0
- data/core/src/raw/http_util/error.rs +68 -0
- data/core/src/raw/http_util/header.rs +356 -0
- data/core/src/raw/http_util/mod.rs +78 -0
- data/core/src/raw/http_util/multipart.rs +1180 -0
- data/core/src/raw/http_util/uri.rs +190 -0
- data/core/src/raw/layer.rs +295 -0
- data/core/src/raw/mod.rs +101 -0
- data/core/src/raw/oio/buf/flex_buf.rs +118 -0
- data/core/src/raw/oio/buf/mod.rs +25 -0
- data/core/src/raw/oio/buf/pooled_buf.rs +126 -0
- data/core/src/raw/oio/buf/queue_buf.rs +117 -0
- data/core/src/raw/oio/delete/api.rs +102 -0
- data/core/src/raw/oio/delete/batch_delete.rs +127 -0
- data/core/src/raw/oio/delete/mod.rs +30 -0
- data/core/src/raw/oio/delete/one_shot_delete.rs +79 -0
- data/core/src/raw/oio/entry.rs +89 -0
- data/core/src/raw/oio/list/api.rs +69 -0
- data/core/src/raw/oio/list/flat_list.rs +137 -0
- data/core/src/raw/oio/list/hierarchy_list.rs +135 -0
- data/core/src/raw/oio/list/mod.rs +35 -0
- data/core/src/raw/oio/list/page_list.rs +105 -0
- data/core/src/raw/oio/list/prefix_list.rs +64 -0
- data/core/src/raw/oio/mod.rs +40 -0
- data/core/src/raw/oio/read/api.rs +119 -0
- data/core/src/raw/oio/read/mod.rs +21 -0
- data/core/src/raw/oio/write/api.rs +103 -0
- data/core/src/raw/oio/write/append_write.rs +111 -0
- data/core/src/raw/oio/write/block_write.rs +405 -0
- data/core/src/raw/oio/write/mod.rs +42 -0
- data/core/src/raw/oio/write/multipart_write.rs +518 -0
- data/core/src/raw/oio/write/one_shot_write.rs +77 -0
- data/core/src/raw/oio/write/position_write.rs +284 -0
- data/core/src/raw/operation.rs +88 -0
- data/core/src/raw/ops.rs +917 -0
- data/core/src/raw/path.rs +451 -0
- data/core/src/raw/path_cache.rs +244 -0
- data/core/src/raw/rps.rs +249 -0
- data/core/src/raw/serde_util.rs +423 -0
- data/core/src/raw/std_io_util.rs +65 -0
- data/core/src/raw/tests/mod.rs +30 -0
- data/core/src/raw/tests/read.rs +116 -0
- data/core/src/raw/tests/utils.rs +80 -0
- data/core/src/raw/tests/write.rs +79 -0
- data/core/src/raw/tokio_util.rs +24 -0
- data/core/src/raw/version.rs +19 -0
- data/core/src/services/aliyun_drive/backend.rs +421 -0
- data/core/src/services/aliyun_drive/config.rs +72 -0
- data/core/src/services/aliyun_drive/core.rs +651 -0
- data/core/src/services/aliyun_drive/delete.rs +51 -0
- data/core/src/services/aliyun_drive/docs.md +61 -0
- data/core/src/services/aliyun_drive/error.rs +56 -0
- data/core/src/services/aliyun_drive/lister.rs +134 -0
- data/core/src/services/aliyun_drive/mod.rs +39 -0
- data/core/src/services/aliyun_drive/writer.rs +114 -0
- data/core/src/services/alluxio/backend.rs +257 -0
- data/core/src/services/alluxio/config.rs +50 -0
- data/core/src/services/alluxio/core.rs +367 -0
- data/core/src/services/alluxio/delete.rs +38 -0
- data/core/src/services/alluxio/docs.md +45 -0
- data/core/src/services/alluxio/error.rs +99 -0
- data/core/src/services/alluxio/lister.rs +73 -0
- data/core/src/services/alluxio/mod.rs +39 -0
- data/core/src/services/alluxio/writer.rs +74 -0
- data/core/src/services/azblob/backend.rs +594 -0
- data/core/src/services/azblob/config.rs +220 -0
- data/core/src/services/azblob/core.rs +937 -0
- data/core/src/services/azblob/delete.rs +108 -0
- data/core/src/services/azblob/docs.md +77 -0
- data/core/src/services/azblob/error.rs +164 -0
- data/core/src/services/azblob/lister.rs +107 -0
- data/core/src/services/azblob/mod.rs +38 -0
- data/core/src/services/azblob/writer.rs +177 -0
- data/core/src/services/azdls/backend.rs +435 -0
- data/core/src/services/azdls/config.rs +89 -0
- data/core/src/services/azdls/core.rs +388 -0
- data/core/src/services/azdls/delete.rs +48 -0
- data/core/src/services/azdls/docs.md +73 -0
- data/core/src/services/azdls/error.rs +107 -0
- data/core/src/services/azdls/lister.rs +165 -0
- data/core/src/services/azdls/mod.rs +38 -0
- data/core/src/services/azdls/writer.rs +129 -0
- data/core/src/services/azfile/backend.rs +373 -0
- data/core/src/services/azfile/config.rs +61 -0
- data/core/src/services/azfile/core.rs +435 -0
- data/core/src/services/azfile/delete.rs +51 -0
- data/core/src/services/azfile/docs.md +65 -0
- data/core/src/services/azfile/error.rs +108 -0
- data/core/src/services/azfile/lister.rs +217 -0
- data/core/src/services/azfile/mod.rs +39 -0
- data/core/src/services/azfile/writer.rs +92 -0
- data/core/src/services/b2/backend.rs +434 -0
- data/core/src/services/b2/config.rs +64 -0
- data/core/src/services/b2/core.rs +742 -0
- data/core/src/services/b2/delete.rs +56 -0
- data/core/src/services/b2/docs.md +54 -0
- data/core/src/services/b2/error.rs +132 -0
- data/core/src/services/b2/lister.rs +110 -0
- data/core/src/services/b2/mod.rs +39 -0
- data/core/src/services/b2/writer.rs +189 -0
- data/core/src/services/cacache/backend.rs +160 -0
- data/core/src/services/cacache/config.rs +28 -0
- data/core/src/services/cacache/core.rs +96 -0
- data/core/src/services/cacache/delete.rs +39 -0
- data/core/src/services/cacache/docs.md +38 -0
- data/core/src/services/cacache/mod.rs +34 -0
- data/core/src/services/cacache/writer.rs +61 -0
- data/core/src/services/cloudflare_kv/backend.rs +513 -0
- data/core/src/services/cloudflare_kv/config.rs +55 -0
- data/core/src/services/cloudflare_kv/core.rs +168 -0
- data/core/src/services/cloudflare_kv/delete.rs +119 -0
- data/core/src/services/cloudflare_kv/docs.md +21 -0
- data/core/src/services/cloudflare_kv/error.rs +79 -0
- data/core/src/services/cloudflare_kv/lister.rs +170 -0
- data/core/src/services/cloudflare_kv/mod.rs +39 -0
- data/core/src/services/cloudflare_kv/model.rs +76 -0
- data/core/src/services/cloudflare_kv/writer.rs +68 -0
- data/core/src/services/compfs/backend.rs +290 -0
- data/core/src/services/compfs/config.rs +30 -0
- data/core/src/services/compfs/core.rs +159 -0
- data/core/src/services/compfs/delete.rs +53 -0
- data/core/src/services/compfs/lister.rs +98 -0
- data/core/src/services/compfs/mod.rs +38 -0
- data/core/src/services/compfs/reader.rs +79 -0
- data/core/src/services/compfs/writer.rs +90 -0
- data/core/src/services/cos/backend.rs +442 -0
- data/core/src/services/cos/config.rs +54 -0
- data/core/src/services/cos/core.rs +761 -0
- data/core/src/services/cos/delete.rs +48 -0
- data/core/src/services/cos/docs.md +55 -0
- data/core/src/services/cos/error.rs +105 -0
- data/core/src/services/cos/lister.rs +237 -0
- data/core/src/services/cos/mod.rs +39 -0
- data/core/src/services/cos/writer.rs +234 -0
- data/core/src/services/d1/backend.rs +330 -0
- data/core/src/services/d1/config.rs +55 -0
- data/core/src/services/d1/docs.md +48 -0
- data/core/src/services/d1/error.rs +79 -0
- data/core/src/services/d1/mod.rs +29 -0
- data/core/src/services/d1/model.rs +125 -0
- data/core/src/services/dashmap/backend.rs +203 -0
- data/core/src/services/dashmap/config.rs +37 -0
- data/core/src/services/dashmap/core.rs +61 -0
- data/core/src/services/dashmap/delete.rs +40 -0
- data/core/src/services/dashmap/docs.md +38 -0
- data/core/src/services/dashmap/lister.rs +63 -0
- data/core/src/services/dashmap/mod.rs +36 -0
- data/core/src/services/dashmap/writer.rs +87 -0
- data/core/src/services/dbfs/backend.rs +258 -0
- data/core/src/services/dbfs/config.rs +48 -0
- data/core/src/services/dbfs/core.rs +191 -0
- data/core/src/services/dbfs/delete.rs +49 -0
- data/core/src/services/dbfs/docs.md +57 -0
- data/core/src/services/dbfs/error.rs +74 -0
- data/core/src/services/dbfs/lister.rs +96 -0
- data/core/src/services/dbfs/mod.rs +38 -0
- data/core/src/services/dbfs/writer.rs +64 -0
- data/core/src/services/dropbox/backend.rs +187 -0
- data/core/src/services/dropbox/builder.rs +222 -0
- data/core/src/services/dropbox/config.rs +47 -0
- data/core/src/services/dropbox/core.rs +496 -0
- data/core/src/services/dropbox/delete.rs +54 -0
- data/core/src/services/dropbox/docs.md +64 -0
- data/core/src/services/dropbox/error.rs +85 -0
- data/core/src/services/dropbox/lister.rs +117 -0
- data/core/src/services/dropbox/mod.rs +40 -0
- data/core/src/services/dropbox/writer.rs +51 -0
- data/core/src/services/etcd/backend.rs +345 -0
- data/core/src/services/etcd/config.rs +86 -0
- data/core/src/services/etcd/core.rs +143 -0
- data/core/src/services/etcd/deleter.rs +41 -0
- data/core/src/services/etcd/docs.md +45 -0
- data/core/src/services/etcd/error.rs +26 -0
- data/core/src/services/etcd/lister.rs +79 -0
- data/core/src/services/etcd/mod.rs +36 -0
- data/core/src/services/etcd/writer.rs +61 -0
- data/core/src/services/foundationdb/backend.rs +171 -0
- data/core/src/services/foundationdb/config.rs +45 -0
- data/core/src/services/foundationdb/docs.md +42 -0
- data/core/src/services/foundationdb/mod.rs +24 -0
- data/core/src/services/fs/backend.rs +299 -0
- data/core/src/services/fs/config.rs +33 -0
- data/core/src/services/fs/core.rs +227 -0
- data/core/src/services/fs/delete.rs +53 -0
- data/core/src/services/fs/docs.md +49 -0
- data/core/src/services/fs/error.rs +31 -0
- data/core/src/services/fs/lister.rs +81 -0
- data/core/src/services/fs/mod.rs +40 -0
- data/core/src/services/fs/reader.rs +83 -0
- data/core/src/services/fs/writer.rs +212 -0
- data/core/src/services/ftp/backend.rs +388 -0
- data/core/src/services/ftp/config.rs +46 -0
- data/core/src/services/ftp/core.rs +136 -0
- data/core/src/services/ftp/delete.rs +62 -0
- data/core/src/services/ftp/docs.md +42 -0
- data/core/src/services/ftp/err.rs +47 -0
- data/core/src/services/ftp/lister.rs +72 -0
- data/core/src/services/ftp/mod.rs +41 -0
- data/core/src/services/ftp/reader.rs +84 -0
- data/core/src/services/ftp/writer.rs +122 -0
- data/core/src/services/gcs/backend.rs +499 -0
- data/core/src/services/gcs/config.rs +168 -0
- data/core/src/services/gcs/core.rs +1079 -0
- data/core/src/services/gcs/delete.rs +98 -0
- data/core/src/services/gcs/docs.md +76 -0
- data/core/src/services/gcs/error.rs +122 -0
- data/core/src/services/gcs/lister.rs +136 -0
- data/core/src/services/gcs/mod.rs +40 -0
- data/core/src/services/gcs/uri.rs +75 -0
- data/core/src/services/gcs/writer.rs +163 -0
- data/core/src/services/gdrive/backend.rs +176 -0
- data/core/src/services/gdrive/builder.rs +228 -0
- data/core/src/services/gdrive/config.rs +47 -0
- data/core/src/services/gdrive/core.rs +499 -0
- data/core/src/services/gdrive/delete.rs +57 -0
- data/core/src/services/gdrive/docs.md +65 -0
- data/core/src/services/gdrive/error.rs +80 -0
- data/core/src/services/gdrive/lister.rs +110 -0
- data/core/src/services/gdrive/mod.rs +40 -0
- data/core/src/services/gdrive/writer.rs +77 -0
- data/core/src/services/ghac/backend.rs +285 -0
- data/core/src/services/ghac/config.rs +36 -0
- data/core/src/services/ghac/core.rs +459 -0
- data/core/src/services/ghac/docs.md +84 -0
- data/core/src/services/ghac/error.rs +52 -0
- data/core/src/services/ghac/mod.rs +35 -0
- data/core/src/services/ghac/writer.rs +201 -0
- data/core/src/services/github/backend.rs +285 -0
- data/core/src/services/github/config.rs +59 -0
- data/core/src/services/github/core.rs +351 -0
- data/core/src/services/github/delete.rs +41 -0
- data/core/src/services/github/docs.md +52 -0
- data/core/src/services/github/error.rs +101 -0
- data/core/src/services/github/lister.rs +112 -0
- data/core/src/services/github/mod.rs +38 -0
- data/core/src/services/github/writer.rs +51 -0
- data/core/src/services/gridfs/backend.rs +166 -0
- data/core/src/services/gridfs/config.rs +50 -0
- data/core/src/services/gridfs/core.rs +154 -0
- data/core/src/services/gridfs/docs.md +46 -0
- data/core/src/services/gridfs/mod.rs +26 -0
- data/core/src/services/hdfs/backend.rs +413 -0
- data/core/src/services/hdfs/config.rs +59 -0
- data/core/src/services/hdfs/delete.rs +62 -0
- data/core/src/services/hdfs/docs.md +140 -0
- data/core/src/services/hdfs/lister.rs +70 -0
- data/core/src/services/hdfs/mod.rs +36 -0
- data/core/src/services/hdfs/reader.rs +79 -0
- data/core/src/services/hdfs/writer.rs +104 -0
- data/core/src/services/hdfs_native/backend.rs +340 -0
- data/core/src/services/hdfs_native/config.rs +45 -0
- data/core/src/services/hdfs_native/delete.rs +47 -0
- data/core/src/services/hdfs_native/docs.md +35 -0
- data/core/src/services/hdfs_native/error.rs +59 -0
- data/core/src/services/hdfs_native/lister.rs +85 -0
- data/core/src/services/hdfs_native/mod.rs +39 -0
- data/core/src/services/hdfs_native/reader.rs +62 -0
- data/core/src/services/hdfs_native/writer.rs +61 -0
- data/core/src/services/http/backend.rs +291 -0
- data/core/src/services/http/config.rs +49 -0
- data/core/src/services/http/core.rs +125 -0
- data/core/src/services/http/docs.md +45 -0
- data/core/src/services/http/error.rs +53 -0
- data/core/src/services/http/mod.rs +32 -0
- data/core/src/services/huggingface/backend.rs +289 -0
- data/core/src/services/huggingface/config.rs +75 -0
- data/core/src/services/huggingface/core.rs +406 -0
- data/core/src/services/huggingface/docs.md +61 -0
- data/core/src/services/huggingface/error.rs +93 -0
- data/core/src/services/huggingface/lister.rs +91 -0
- data/core/src/services/huggingface/mod.rs +34 -0
- data/core/src/services/ipfs/backend.rs +257 -0
- data/core/src/services/ipfs/config.rs +32 -0
- data/core/src/services/ipfs/core.rs +239 -0
- data/core/src/services/ipfs/docs.md +45 -0
- data/core/src/services/ipfs/error.rs +52 -0
- data/core/src/services/ipfs/ipld.rs +162 -0
- data/core/src/services/ipfs/mod.rs +34 -0
- data/core/src/services/ipmfs/backend.rs +147 -0
- data/core/src/services/ipmfs/builder.rs +166 -0
- data/core/src/services/ipmfs/config.rs +32 -0
- data/core/src/services/ipmfs/core.rs +142 -0
- data/core/src/services/ipmfs/delete.rs +48 -0
- data/core/src/services/ipmfs/docs.md +14 -0
- data/core/src/services/ipmfs/error.rs +83 -0
- data/core/src/services/ipmfs/lister.rs +135 -0
- data/core/src/services/ipmfs/mod.rs +40 -0
- data/core/src/services/ipmfs/writer.rs +49 -0
- data/core/src/services/koofr/backend.rs +361 -0
- data/core/src/services/koofr/config.rs +50 -0
- data/core/src/services/koofr/core.rs +458 -0
- data/core/src/services/koofr/delete.rs +50 -0
- data/core/src/services/koofr/docs.md +51 -0
- data/core/src/services/koofr/error.rs +72 -0
- data/core/src/services/koofr/lister.rs +88 -0
- data/core/src/services/koofr/mod.rs +38 -0
- data/core/src/services/koofr/writer.rs +53 -0
- data/core/src/services/lakefs/backend.rs +309 -0
- data/core/src/services/lakefs/config.rs +81 -0
- data/core/src/services/lakefs/core.rs +261 -0
- data/core/src/services/lakefs/delete.rs +54 -0
- data/core/src/services/lakefs/docs.md +62 -0
- data/core/src/services/lakefs/error.rs +93 -0
- data/core/src/services/lakefs/lister.rs +120 -0
- data/core/src/services/lakefs/mod.rs +38 -0
- data/core/src/services/lakefs/writer.rs +50 -0
- data/core/src/services/memcached/backend.rs +284 -0
- data/core/src/services/memcached/binary.rs +289 -0
- data/core/src/services/memcached/config.rs +43 -0
- data/core/src/services/memcached/docs.md +47 -0
- data/core/src/services/memcached/mod.rs +27 -0
- data/core/src/services/memory/backend.rs +205 -0
- data/core/src/services/memory/config.rs +30 -0
- data/core/src/services/memory/core.rs +80 -0
- data/core/src/services/memory/delete.rs +42 -0
- data/core/src/services/memory/docs.md +36 -0
- data/core/src/services/memory/lister.rs +56 -0
- data/core/src/services/memory/mod.rs +36 -0
- data/core/src/services/memory/writer.rs +85 -0
- data/core/src/services/mini_moka/backend.rs +260 -0
- data/core/src/services/mini_moka/config.rs +56 -0
- data/core/src/services/mini_moka/core.rs +52 -0
- data/core/src/services/mini_moka/delete.rs +42 -0
- data/core/src/services/mini_moka/docs.md +19 -0
- data/core/src/services/mini_moka/lister.rs +68 -0
- data/core/src/services/mini_moka/mod.rs +36 -0
- data/core/src/services/mini_moka/writer.rs +84 -0
- data/core/src/services/mod.rs +206 -0
- data/core/src/services/moka/backend.rs +326 -0
- data/core/src/services/moka/config.rs +59 -0
- data/core/src/services/moka/core.rs +62 -0
- data/core/src/services/moka/delete.rs +42 -0
- data/core/src/services/moka/docs.md +42 -0
- data/core/src/services/moka/lister.rs +65 -0
- data/core/src/services/moka/mod.rs +41 -0
- data/core/src/services/moka/writer.rs +83 -0
- data/core/src/services/mongodb/backend.rs +291 -0
- data/core/src/services/mongodb/config.rs +54 -0
- data/core/src/services/mongodb/docs.md +49 -0
- data/core/src/services/mongodb/mod.rs +24 -0
- data/core/src/services/monoiofs/backend.rs +238 -0
- data/core/src/services/monoiofs/config.rs +34 -0
- data/core/src/services/monoiofs/core.rs +313 -0
- data/core/src/services/monoiofs/delete.rs +64 -0
- data/core/src/services/monoiofs/docs.md +46 -0
- data/core/src/services/monoiofs/mod.rs +36 -0
- data/core/src/services/monoiofs/reader.rs +147 -0
- data/core/src/services/monoiofs/writer.rs +189 -0
- data/core/src/services/mysql/backend.rs +256 -0
- data/core/src/services/mysql/config.rs +66 -0
- data/core/src/services/mysql/docs.md +47 -0
- data/core/src/services/mysql/mod.rs +24 -0
- data/core/src/services/obs/backend.rs +442 -0
- data/core/src/services/obs/config.rs +53 -0
- data/core/src/services/obs/core.rs +608 -0
- data/core/src/services/obs/delete.rs +48 -0
- data/core/src/services/obs/docs.md +54 -0
- data/core/src/services/obs/error.rs +106 -0
- data/core/src/services/obs/lister.rs +101 -0
- data/core/src/services/obs/mod.rs +38 -0
- data/core/src/services/obs/writer.rs +235 -0
- data/core/src/services/onedrive/backend.rs +127 -0
- data/core/src/services/onedrive/builder.rs +236 -0
- data/core/src/services/onedrive/config.rs +49 -0
- data/core/src/services/onedrive/core.rs +691 -0
- data/core/src/services/onedrive/delete.rs +47 -0
- data/core/src/services/onedrive/docs.md +115 -0
- data/core/src/services/onedrive/error.rs +61 -0
- data/core/src/services/onedrive/graph_model.rs +425 -0
- data/core/src/services/onedrive/lister.rs +150 -0
- data/core/src/services/onedrive/mod.rs +42 -0
- data/core/src/services/onedrive/writer.rs +168 -0
- data/core/src/services/opfs/backend.rs +50 -0
- data/core/src/services/opfs/config.rs +25 -0
- data/core/src/services/opfs/core.rs +74 -0
- data/core/src/services/opfs/docs.md +18 -0
- data/core/src/services/opfs/error.rs +27 -0
- data/core/src/services/opfs/mod.rs +30 -0
- data/core/src/services/opfs/utils.rs +70 -0
- data/core/src/services/oss/backend.rs +734 -0
- data/core/src/services/oss/config.rs +113 -0
- data/core/src/services/oss/core.rs +1088 -0
- data/core/src/services/oss/delete.rs +109 -0
- data/core/src/services/oss/docs.md +74 -0
- data/core/src/services/oss/error.rs +109 -0
- data/core/src/services/oss/lister.rs +256 -0
- data/core/src/services/oss/mod.rs +38 -0
- data/core/src/services/oss/writer.rs +228 -0
- data/core/src/services/pcloud/backend.rs +358 -0
- data/core/src/services/pcloud/config.rs +51 -0
- data/core/src/services/pcloud/core.rs +461 -0
- data/core/src/services/pcloud/delete.rs +66 -0
- data/core/src/services/pcloud/docs.md +51 -0
- data/core/src/services/pcloud/error.rs +88 -0
- data/core/src/services/pcloud/lister.rs +95 -0
- data/core/src/services/pcloud/mod.rs +38 -0
- data/core/src/services/pcloud/writer.rs +66 -0
- data/core/src/services/persy/backend.rs +226 -0
- data/core/src/services/persy/config.rs +32 -0
- data/core/src/services/persy/docs.md +43 -0
- data/core/src/services/persy/mod.rs +24 -0
- data/core/src/services/postgresql/backend.rs +258 -0
- data/core/src/services/postgresql/config.rs +66 -0
- data/core/src/services/postgresql/docs.md +47 -0
- data/core/src/services/postgresql/mod.rs +24 -0
- data/core/src/services/redb/backend.rs +280 -0
- data/core/src/services/redb/config.rs +34 -0
- data/core/src/services/redb/docs.md +41 -0
- data/core/src/services/redb/mod.rs +24 -0
- data/core/src/services/redis/backend.rs +442 -0
- data/core/src/services/redis/config.rs +79 -0
- data/core/src/services/redis/core.rs +209 -0
- data/core/src/services/redis/delete.rs +40 -0
- data/core/src/services/redis/docs.md +43 -0
- data/core/src/services/redis/mod.rs +34 -0
- data/core/src/services/redis/writer.rs +57 -0
- data/core/src/services/rocksdb/backend.rs +159 -0
- data/core/src/services/rocksdb/config.rs +34 -0
- data/core/src/services/rocksdb/docs.md +54 -0
- data/core/src/services/rocksdb/mod.rs +24 -0
- data/core/src/services/s3/backend.rs +1293 -0
- data/core/src/services/s3/compatible_services.md +126 -0
- data/core/src/services/s3/config.rs +327 -0
- data/core/src/services/s3/core.rs +1741 -0
- data/core/src/services/s3/delete.rs +109 -0
- data/core/src/services/s3/docs.md +244 -0
- data/core/src/services/s3/error.rs +171 -0
- data/core/src/services/s3/lister.rs +405 -0
- data/core/src/services/s3/mod.rs +38 -0
- data/core/src/services/s3/writer.rs +262 -0
- data/core/src/services/seafile/backend.rs +297 -0
- data/core/src/services/seafile/config.rs +56 -0
- data/core/src/services/seafile/core.rs +475 -0
- data/core/src/services/seafile/delete.rs +40 -0
- data/core/src/services/seafile/docs.md +54 -0
- data/core/src/services/seafile/error.rs +86 -0
- data/core/src/services/seafile/lister.rs +83 -0
- data/core/src/services/seafile/mod.rs +38 -0
- data/core/src/services/seafile/writer.rs +55 -0
- data/core/src/services/sftp/backend.rs +397 -0
- data/core/src/services/sftp/config.rs +50 -0
- data/core/src/services/sftp/core.rs +154 -0
- data/core/src/services/sftp/delete.rs +55 -0
- data/core/src/services/sftp/docs.md +49 -0
- data/core/src/services/sftp/error.rs +57 -0
- data/core/src/services/sftp/lister.rs +88 -0
- data/core/src/services/sftp/mod.rs +42 -0
- data/core/src/services/sftp/reader.rs +78 -0
- data/core/src/services/sftp/utils.rs +51 -0
- data/core/src/services/sftp/writer.rs +67 -0
- data/core/src/services/sled/backend.rs +194 -0
- data/core/src/services/sled/config.rs +45 -0
- data/core/src/services/sled/docs.md +39 -0
- data/core/src/services/sled/mod.rs +24 -0
- data/core/src/services/sqlite/backend.rs +326 -0
- data/core/src/services/sqlite/config.rs +70 -0
- data/core/src/services/sqlite/docs.md +46 -0
- data/core/src/services/sqlite/mod.rs +24 -0
- data/core/src/services/surrealdb/backend.rs +365 -0
- data/core/src/services/surrealdb/config.rs +64 -0
- data/core/src/services/surrealdb/docs.md +54 -0
- data/core/src/services/surrealdb/mod.rs +24 -0
- data/core/src/services/swift/backend.rs +275 -0
- data/core/src/services/swift/compatible_services.md +53 -0
- data/core/src/services/swift/config.rs +53 -0
- data/core/src/services/swift/core.rs +310 -0
- data/core/src/services/swift/delete.rs +49 -0
- data/core/src/services/swift/docs.md +52 -0
- data/core/src/services/swift/error.rs +90 -0
- data/core/src/services/swift/lister.rs +119 -0
- data/core/src/services/swift/mod.rs +38 -0
- data/core/src/services/swift/writer.rs +53 -0
- data/core/src/services/tikv/backend.rs +237 -0
- data/core/src/services/tikv/config.rs +52 -0
- data/core/src/services/tikv/docs.md +43 -0
- data/core/src/services/tikv/mod.rs +24 -0
- data/core/src/services/upyun/backend.rs +317 -0
- data/core/src/services/upyun/config.rs +51 -0
- data/core/src/services/upyun/core.rs +521 -0
- data/core/src/services/upyun/delete.rs +50 -0
- data/core/src/services/upyun/docs.md +51 -0
- data/core/src/services/upyun/error.rs +97 -0
- data/core/src/services/upyun/lister.rs +101 -0
- data/core/src/services/upyun/mod.rs +38 -0
- data/core/src/services/upyun/writer.rs +127 -0
- data/core/src/services/vercel_artifacts/backend.rs +99 -0
- data/core/src/services/vercel_artifacts/builder.rs +117 -0
- data/core/src/services/vercel_artifacts/config.rs +39 -0
- data/core/src/services/vercel_artifacts/core.rs +112 -0
- data/core/src/services/vercel_artifacts/docs.md +40 -0
- data/core/src/services/vercel_artifacts/error.rs +50 -0
- data/core/src/services/vercel_artifacts/mod.rs +36 -0
- data/core/src/services/vercel_artifacts/writer.rs +58 -0
- data/core/src/services/vercel_blob/backend.rs +251 -0
- data/core/src/services/vercel_blob/config.rs +45 -0
- data/core/src/services/vercel_blob/core.rs +449 -0
- data/core/src/services/vercel_blob/delete.rs +38 -0
- data/core/src/services/vercel_blob/docs.md +45 -0
- data/core/src/services/vercel_blob/error.rs +110 -0
- data/core/src/services/vercel_blob/lister.rs +69 -0
- data/core/src/services/vercel_blob/mod.rs +38 -0
- data/core/src/services/vercel_blob/writer.rs +143 -0
- data/core/src/services/webdav/backend.rs +318 -0
- data/core/src/services/webdav/config.rs +53 -0
- data/core/src/services/webdav/core.rs +859 -0
- data/core/src/services/webdav/delete.rs +47 -0
- data/core/src/services/webdav/docs.md +49 -0
- data/core/src/services/webdav/error.rs +53 -0
- data/core/src/services/webdav/lister.rs +106 -0
- data/core/src/services/webdav/mod.rs +38 -0
- data/core/src/services/webdav/writer.rs +56 -0
- data/core/src/services/webhdfs/backend.rs +376 -0
- data/core/src/services/webhdfs/config.rs +52 -0
- data/core/src/services/webhdfs/core.rs +398 -0
- data/core/src/services/webhdfs/delete.rs +46 -0
- data/core/src/services/webhdfs/docs.md +90 -0
- data/core/src/services/webhdfs/error.rs +126 -0
- data/core/src/services/webhdfs/lister.rs +130 -0
- data/core/src/services/webhdfs/message.rs +249 -0
- data/core/src/services/webhdfs/mod.rs +41 -0
- data/core/src/services/webhdfs/writer.rs +177 -0
- data/core/src/services/yandex_disk/backend.rs +267 -0
- data/core/src/services/yandex_disk/config.rs +45 -0
- data/core/src/services/yandex_disk/core.rs +340 -0
- data/core/src/services/yandex_disk/delete.rs +54 -0
- data/core/src/services/yandex_disk/docs.md +45 -0
- data/core/src/services/yandex_disk/error.rs +104 -0
- data/core/src/services/yandex_disk/lister.rs +113 -0
- data/core/src/services/yandex_disk/mod.rs +38 -0
- data/core/src/services/yandex_disk/writer.rs +52 -0
- data/core/src/types/buffer.rs +991 -0
- data/core/src/types/builder.rs +152 -0
- data/core/src/types/capability.rs +209 -0
- data/core/src/types/context/mod.rs +22 -0
- data/core/src/types/context/read.rs +231 -0
- data/core/src/types/context/write.rs +441 -0
- data/core/src/types/delete/deleter.rs +220 -0
- data/core/src/types/delete/futures_delete_sink.rs +176 -0
- data/core/src/types/delete/input.rs +97 -0
- data/core/src/types/delete/mod.rs +26 -0
- data/core/src/types/entry.rs +69 -0
- data/core/src/types/error.rs +570 -0
- data/core/src/types/execute/api.rs +110 -0
- data/core/src/types/execute/executor.rs +96 -0
- data/core/src/types/execute/executors/mod.rs +27 -0
- data/core/src/types/execute/executors/tokio_executor.rs +60 -0
- data/core/src/types/execute/mod.rs +25 -0
- data/core/src/types/list.rs +137 -0
- data/core/src/types/metadata.rs +436 -0
- data/core/src/types/mod.rs +72 -0
- data/core/src/types/mode.rs +68 -0
- data/core/src/types/operator/builder.rs +535 -0
- data/core/src/types/operator/info.rs +63 -0
- data/core/src/types/operator/mod.rs +33 -0
- data/core/src/types/operator/operator.rs +2236 -0
- data/core/src/types/operator/operator_futures.rs +1430 -0
- data/core/src/types/operator/registry.rs +129 -0
- data/core/src/types/options.rs +548 -0
- data/core/src/types/read/buffer_stream.rs +273 -0
- data/core/src/types/read/futures_async_reader.rs +289 -0
- data/core/src/types/read/futures_bytes_stream.rs +157 -0
- data/core/src/types/read/mod.rs +29 -0
- data/core/src/types/read/reader.rs +604 -0
- data/core/src/types/scheme.rs +475 -0
- data/core/src/types/write/buffer_sink.rs +188 -0
- data/core/src/types/write/futures_async_writer.rs +136 -0
- data/core/src/types/write/futures_bytes_sink.rs +103 -0
- data/core/src/types/write/mod.rs +26 -0
- data/core/src/types/write/writer.rs +411 -0
- data/core/tests/behavior/README.md +77 -0
- data/core/tests/behavior/async_copy.rs +314 -0
- data/core/tests/behavior/async_create_dir.rs +53 -0
- data/core/tests/behavior/async_delete.rs +354 -0
- data/core/tests/behavior/async_list.rs +739 -0
- data/core/tests/behavior/async_presign.rs +175 -0
- data/core/tests/behavior/async_read.rs +871 -0
- data/core/tests/behavior/async_rename.rs +210 -0
- data/core/tests/behavior/async_stat.rs +628 -0
- data/core/tests/behavior/async_write.rs +819 -0
- data/core/tests/behavior/main.rs +78 -0
- data/core/tests/behavior/utils.rs +187 -0
- data/core/tests/data/normal_dir/.gitkeep +0 -0
- data/core/tests/data/normal_file.txt +1041 -0
- data/core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep +0 -0
- data/core/tests/data/special_file !@#$%^&()_+-=;',.txt +1041 -0
- data/core/users.md +13 -0
- data/extconf.rb +24 -0
- data/lib/opendal.rb +25 -0
- data/lib/opendal_ruby/entry.rb +35 -0
- data/lib/opendal_ruby/io.rb +70 -0
- data/lib/opendal_ruby/metadata.rb +44 -0
- data/lib/opendal_ruby/operator.rb +29 -0
- data/lib/opendal_ruby/operator_info.rb +26 -0
- data/src/capability.rs +146 -0
- data/src/io.rs +464 -0
- data/src/lib.rs +63 -0
- data/src/lister.rs +141 -0
- data/src/metadata.rs +111 -0
- data/src/middlewares.rs +174 -0
- data/src/operator.rs +310 -0
- data/src/operator_info.rs +83 -0
- data/test/blocking_op_test.rb +112 -0
- data/test/capability_test.rb +42 -0
- data/test/io_test.rb +172 -0
- data/test/lister_test.rb +77 -0
- data/test/metadata_test.rb +78 -0
- data/test/middlewares_test.rb +46 -0
- data/test/operator_info_test.rb +35 -0
- data/test/test_helper.rb +36 -0
- metadata +857 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
//! Services will provide builders to build underlying backends.
|
|
19
|
+
//!
|
|
20
|
+
//! More ongoing services support is tracked at [opendal#5](https://github.com/apache/opendal/issues/5). Please feel free to submit issues if there are services not covered.
|
|
21
|
+
|
|
22
|
+
mod aliyun_drive;
|
|
23
|
+
pub use aliyun_drive::*;
|
|
24
|
+
|
|
25
|
+
mod alluxio;
|
|
26
|
+
pub use alluxio::*;
|
|
27
|
+
|
|
28
|
+
mod azblob;
|
|
29
|
+
pub use azblob::*;
|
|
30
|
+
|
|
31
|
+
mod azdls;
|
|
32
|
+
pub use azdls::*;
|
|
33
|
+
|
|
34
|
+
mod azfile;
|
|
35
|
+
pub use azfile::*;
|
|
36
|
+
|
|
37
|
+
mod b2;
|
|
38
|
+
pub use b2::*;
|
|
39
|
+
|
|
40
|
+
mod cacache;
|
|
41
|
+
pub use self::cacache::*;
|
|
42
|
+
|
|
43
|
+
mod cloudflare_kv;
|
|
44
|
+
pub use self::cloudflare_kv::*;
|
|
45
|
+
|
|
46
|
+
mod compfs;
|
|
47
|
+
pub use compfs::*;
|
|
48
|
+
|
|
49
|
+
mod cos;
|
|
50
|
+
pub use cos::*;
|
|
51
|
+
|
|
52
|
+
mod d1;
|
|
53
|
+
pub use self::d1::*;
|
|
54
|
+
|
|
55
|
+
mod dashmap;
|
|
56
|
+
pub use self::dashmap::*;
|
|
57
|
+
|
|
58
|
+
mod dbfs;
|
|
59
|
+
pub use self::dbfs::*;
|
|
60
|
+
|
|
61
|
+
mod dropbox;
|
|
62
|
+
pub use dropbox::*;
|
|
63
|
+
|
|
64
|
+
mod etcd;
|
|
65
|
+
pub use self::etcd::*;
|
|
66
|
+
|
|
67
|
+
mod foundationdb;
|
|
68
|
+
pub use self::foundationdb::*;
|
|
69
|
+
|
|
70
|
+
mod fs;
|
|
71
|
+
pub use fs::*;
|
|
72
|
+
|
|
73
|
+
mod ftp;
|
|
74
|
+
pub use ftp::*;
|
|
75
|
+
|
|
76
|
+
mod gcs;
|
|
77
|
+
pub use gcs::*;
|
|
78
|
+
|
|
79
|
+
mod gdrive;
|
|
80
|
+
pub use gdrive::*;
|
|
81
|
+
|
|
82
|
+
mod ghac;
|
|
83
|
+
pub use ghac::*;
|
|
84
|
+
|
|
85
|
+
mod github;
|
|
86
|
+
pub use github::*;
|
|
87
|
+
|
|
88
|
+
mod gridfs;
|
|
89
|
+
pub use gridfs::*;
|
|
90
|
+
|
|
91
|
+
mod hdfs;
|
|
92
|
+
pub use self::hdfs::*;
|
|
93
|
+
|
|
94
|
+
mod hdfs_native;
|
|
95
|
+
pub use hdfs_native::*;
|
|
96
|
+
|
|
97
|
+
mod http;
|
|
98
|
+
pub use self::http::*;
|
|
99
|
+
|
|
100
|
+
mod huggingface;
|
|
101
|
+
pub use huggingface::*;
|
|
102
|
+
|
|
103
|
+
mod ipfs;
|
|
104
|
+
pub use self::ipfs::*;
|
|
105
|
+
|
|
106
|
+
mod ipmfs;
|
|
107
|
+
pub use ipmfs::*;
|
|
108
|
+
|
|
109
|
+
mod koofr;
|
|
110
|
+
pub use koofr::*;
|
|
111
|
+
|
|
112
|
+
mod lakefs;
|
|
113
|
+
pub use lakefs::*;
|
|
114
|
+
|
|
115
|
+
mod memcached;
|
|
116
|
+
pub use memcached::*;
|
|
117
|
+
|
|
118
|
+
mod memory;
|
|
119
|
+
pub use self::memory::*;
|
|
120
|
+
|
|
121
|
+
mod mini_moka;
|
|
122
|
+
pub use self::mini_moka::*;
|
|
123
|
+
|
|
124
|
+
mod moka;
|
|
125
|
+
pub use self::moka::*;
|
|
126
|
+
|
|
127
|
+
mod mongodb;
|
|
128
|
+
pub use self::mongodb::*;
|
|
129
|
+
|
|
130
|
+
mod monoiofs;
|
|
131
|
+
pub use monoiofs::*;
|
|
132
|
+
|
|
133
|
+
mod mysql;
|
|
134
|
+
pub use self::mysql::*;
|
|
135
|
+
|
|
136
|
+
mod obs;
|
|
137
|
+
pub use obs::*;
|
|
138
|
+
|
|
139
|
+
mod onedrive;
|
|
140
|
+
pub use onedrive::*;
|
|
141
|
+
|
|
142
|
+
mod oss;
|
|
143
|
+
pub use oss::*;
|
|
144
|
+
|
|
145
|
+
mod pcloud;
|
|
146
|
+
pub use pcloud::*;
|
|
147
|
+
|
|
148
|
+
mod persy;
|
|
149
|
+
pub use self::persy::*;
|
|
150
|
+
|
|
151
|
+
mod postgresql;
|
|
152
|
+
pub use self::postgresql::*;
|
|
153
|
+
|
|
154
|
+
mod redb;
|
|
155
|
+
pub use self::redb::*;
|
|
156
|
+
|
|
157
|
+
mod redis;
|
|
158
|
+
pub use self::redis::*;
|
|
159
|
+
|
|
160
|
+
mod rocksdb;
|
|
161
|
+
pub use self::rocksdb::*;
|
|
162
|
+
|
|
163
|
+
mod s3;
|
|
164
|
+
pub use s3::*;
|
|
165
|
+
|
|
166
|
+
mod seafile;
|
|
167
|
+
pub use seafile::*;
|
|
168
|
+
|
|
169
|
+
mod sftp;
|
|
170
|
+
pub use sftp::*;
|
|
171
|
+
|
|
172
|
+
mod sled;
|
|
173
|
+
pub use self::sled::*;
|
|
174
|
+
|
|
175
|
+
mod sqlite;
|
|
176
|
+
pub use self::sqlite::*;
|
|
177
|
+
|
|
178
|
+
mod surrealdb;
|
|
179
|
+
pub use surrealdb::*;
|
|
180
|
+
|
|
181
|
+
mod swift;
|
|
182
|
+
pub use self::swift::*;
|
|
183
|
+
|
|
184
|
+
mod tikv;
|
|
185
|
+
pub use self::tikv::*;
|
|
186
|
+
|
|
187
|
+
mod upyun;
|
|
188
|
+
pub use upyun::*;
|
|
189
|
+
|
|
190
|
+
mod vercel_artifacts;
|
|
191
|
+
pub use vercel_artifacts::*;
|
|
192
|
+
|
|
193
|
+
mod vercel_blob;
|
|
194
|
+
pub use vercel_blob::*;
|
|
195
|
+
|
|
196
|
+
mod webdav;
|
|
197
|
+
pub use webdav::*;
|
|
198
|
+
|
|
199
|
+
mod webhdfs;
|
|
200
|
+
pub use webhdfs::*;
|
|
201
|
+
|
|
202
|
+
mod yandex_disk;
|
|
203
|
+
pub use yandex_disk::*;
|
|
204
|
+
|
|
205
|
+
#[cfg(target_arch = "wasm32")]
|
|
206
|
+
mod opfs;
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
use std::fmt::Formatter;
|
|
20
|
+
use std::sync::Arc;
|
|
21
|
+
use std::time::Duration;
|
|
22
|
+
|
|
23
|
+
use log::debug;
|
|
24
|
+
|
|
25
|
+
use super::core::*;
|
|
26
|
+
use super::delete::MokaDeleter;
|
|
27
|
+
use super::lister::MokaLister;
|
|
28
|
+
use super::writer::MokaWriter;
|
|
29
|
+
use super::DEFAULT_SCHEME;
|
|
30
|
+
use crate::raw::oio;
|
|
31
|
+
use crate::raw::*;
|
|
32
|
+
use crate::services::MokaConfig;
|
|
33
|
+
use crate::*;
|
|
34
|
+
impl Configurator for MokaConfig {
|
|
35
|
+
type Builder = MokaBuilder;
|
|
36
|
+
fn into_builder(self) -> Self::Builder {
|
|
37
|
+
MokaBuilder {
|
|
38
|
+
config: self,
|
|
39
|
+
..Default::default()
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Type alias of [`moka::future::Cache`](https://docs.rs/moka/latest/moka/future/struct.Cache.html)
|
|
45
|
+
pub type MokaCache<K, V> = moka::future::Cache<K, V>;
|
|
46
|
+
/// Type alias of [`moka::future::CacheBuilder`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html)
|
|
47
|
+
pub type MokaCacheBuilder<K, V> = moka::future::CacheBuilder<K, V, MokaCache<K, V>>;
|
|
48
|
+
|
|
49
|
+
/// [moka](https://github.com/moka-rs/moka) backend support.
|
|
50
|
+
#[doc = include_str!("docs.md")]
|
|
51
|
+
#[derive(Default)]
|
|
52
|
+
pub struct MokaBuilder {
|
|
53
|
+
config: MokaConfig,
|
|
54
|
+
builder: MokaCacheBuilder<String, MokaValue>,
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
impl Debug for MokaBuilder {
|
|
58
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
59
|
+
f.debug_struct("MokaBuilder")
|
|
60
|
+
.field("config", &self.config)
|
|
61
|
+
.finish()
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
impl MokaBuilder {
|
|
66
|
+
/// Create a [`MokaBuilder`] with the given [`moka::future::CacheBuilder`].
|
|
67
|
+
///
|
|
68
|
+
/// Refer to [`moka::future::CacheBuilder`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html)
|
|
69
|
+
///
|
|
70
|
+
/// # Example
|
|
71
|
+
///
|
|
72
|
+
/// ```no_run
|
|
73
|
+
/// # use std::sync::Arc;
|
|
74
|
+
/// # use std::time::Duration;
|
|
75
|
+
/// # use log::debug;
|
|
76
|
+
/// # use moka::notification::RemovalCause;
|
|
77
|
+
/// # use opendal::services::Moka;
|
|
78
|
+
/// # use opendal::services::MokaCacheBuilder;
|
|
79
|
+
/// # use opendal::services::MokaValue;
|
|
80
|
+
/// # use opendal::Configurator;
|
|
81
|
+
/// let moka = Moka::new(
|
|
82
|
+
/// MokaCacheBuilder::<String, MokaValue>::default()
|
|
83
|
+
/// .name("demo")
|
|
84
|
+
/// .max_capacity(1000)
|
|
85
|
+
/// .time_to_live(Duration::from_secs(300))
|
|
86
|
+
/// .weigher(|k, v| (k.len() + v.content.len()) as u32)
|
|
87
|
+
/// .eviction_listener(|k: Arc<String>, v: MokaValue, cause: RemovalCause| {
|
|
88
|
+
/// debug!(
|
|
89
|
+
/// "moka cache eviction listener, key = {}, value = {:?}, cause = {:?}",
|
|
90
|
+
/// k.as_str(), v.content.to_vec(), cause
|
|
91
|
+
/// );
|
|
92
|
+
/// })
|
|
93
|
+
/// );
|
|
94
|
+
/// ```
|
|
95
|
+
pub fn new(builder: MokaCacheBuilder<String, MokaValue>) -> Self {
|
|
96
|
+
Self {
|
|
97
|
+
builder,
|
|
98
|
+
..Default::default()
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Sets the name of the cache.
|
|
103
|
+
///
|
|
104
|
+
/// Refer to [`moka::future::CacheBuilder::name`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.name)
|
|
105
|
+
pub fn name(mut self, v: &str) -> Self {
|
|
106
|
+
if !v.is_empty() {
|
|
107
|
+
self.config.name = Some(v.to_owned());
|
|
108
|
+
}
|
|
109
|
+
self
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Sets the max capacity of the cache.
|
|
113
|
+
///
|
|
114
|
+
/// Refer to [`moka::future::CacheBuilder::max_capacity`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.max_capacity)
|
|
115
|
+
pub fn max_capacity(mut self, v: u64) -> Self {
|
|
116
|
+
if v != 0 {
|
|
117
|
+
self.config.max_capacity = Some(v);
|
|
118
|
+
}
|
|
119
|
+
self
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// Sets the time to live of the cache.
|
|
123
|
+
///
|
|
124
|
+
/// Refer to [`moka::future::CacheBuilder::time_to_live`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.time_to_live)
|
|
125
|
+
pub fn time_to_live(mut self, v: Duration) -> Self {
|
|
126
|
+
if !v.is_zero() {
|
|
127
|
+
self.config.time_to_live = Some(v);
|
|
128
|
+
}
|
|
129
|
+
self
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// Sets the time to idle of the cache.
|
|
133
|
+
///
|
|
134
|
+
/// Refer to [`moka::future::CacheBuilder::time_to_idle`](https://docs.rs/moka/latest/moka/sync/struct.CacheBuilder.html#method.time_to_idle)
|
|
135
|
+
pub fn time_to_idle(mut self, v: Duration) -> Self {
|
|
136
|
+
if !v.is_zero() {
|
|
137
|
+
self.config.time_to_idle = Some(v);
|
|
138
|
+
}
|
|
139
|
+
self
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// Set the root path of this backend
|
|
143
|
+
pub fn root(mut self, path: &str) -> Self {
|
|
144
|
+
self.config.root = if path.is_empty() {
|
|
145
|
+
None
|
|
146
|
+
} else {
|
|
147
|
+
Some(path.to_string())
|
|
148
|
+
};
|
|
149
|
+
self
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
impl Builder for MokaBuilder {
|
|
154
|
+
type Config = MokaConfig;
|
|
155
|
+
|
|
156
|
+
fn build(self) -> Result<impl Access> {
|
|
157
|
+
debug!("backend build started: {:?}", &self);
|
|
158
|
+
|
|
159
|
+
let root = normalize_root(
|
|
160
|
+
self.config
|
|
161
|
+
.root
|
|
162
|
+
.clone()
|
|
163
|
+
.unwrap_or_else(|| "/".to_string())
|
|
164
|
+
.as_str(),
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
let mut builder = self.builder;
|
|
168
|
+
|
|
169
|
+
if let Some(v) = &self.config.name {
|
|
170
|
+
builder = builder.name(v);
|
|
171
|
+
}
|
|
172
|
+
if let Some(v) = self.config.max_capacity {
|
|
173
|
+
builder = builder.max_capacity(v);
|
|
174
|
+
}
|
|
175
|
+
if let Some(v) = self.config.time_to_live {
|
|
176
|
+
builder = builder.time_to_live(v);
|
|
177
|
+
}
|
|
178
|
+
if let Some(v) = self.config.time_to_idle {
|
|
179
|
+
builder = builder.time_to_idle(v);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
debug!("backend build finished: {:?}", self.config);
|
|
183
|
+
|
|
184
|
+
let core = MokaCore {
|
|
185
|
+
cache: builder.build(),
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
Ok(MokaAccessor::new(core).with_normalized_root(root))
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/// MokaAccessor implements Access trait directly
|
|
193
|
+
#[derive(Debug, Clone)]
|
|
194
|
+
pub struct MokaAccessor {
|
|
195
|
+
core: Arc<MokaCore>,
|
|
196
|
+
root: String,
|
|
197
|
+
info: Arc<AccessorInfo>,
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
impl MokaAccessor {
|
|
201
|
+
fn new(core: MokaCore) -> Self {
|
|
202
|
+
let info = AccessorInfo::default();
|
|
203
|
+
info.set_scheme(DEFAULT_SCHEME);
|
|
204
|
+
info.set_name(core.cache.name().unwrap_or("moka"));
|
|
205
|
+
info.set_root("/");
|
|
206
|
+
info.set_native_capability(Capability {
|
|
207
|
+
read: true,
|
|
208
|
+
write: true,
|
|
209
|
+
write_can_empty: true,
|
|
210
|
+
write_with_cache_control: true,
|
|
211
|
+
write_with_content_type: true,
|
|
212
|
+
write_with_content_disposition: true,
|
|
213
|
+
write_with_content_encoding: true,
|
|
214
|
+
delete: true,
|
|
215
|
+
stat: true,
|
|
216
|
+
list: true,
|
|
217
|
+
shared: false,
|
|
218
|
+
..Default::default()
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
Self {
|
|
222
|
+
core: Arc::new(core),
|
|
223
|
+
root: "/".to_string(),
|
|
224
|
+
info: Arc::new(info),
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
fn with_normalized_root(mut self, root: String) -> Self {
|
|
229
|
+
self.info.set_root(&root);
|
|
230
|
+
self.root = root;
|
|
231
|
+
self
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
impl Access for MokaAccessor {
|
|
236
|
+
type Reader = Buffer;
|
|
237
|
+
type Writer = MokaWriter;
|
|
238
|
+
type Lister = oio::HierarchyLister<MokaLister>;
|
|
239
|
+
type Deleter = oio::OneShotDeleter<MokaDeleter>;
|
|
240
|
+
|
|
241
|
+
fn info(&self) -> Arc<AccessorInfo> {
|
|
242
|
+
self.info.clone()
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async fn stat(&self, path: &str, _: OpStat) -> Result<RpStat> {
|
|
246
|
+
let p = build_abs_path(&self.root, path);
|
|
247
|
+
|
|
248
|
+
if p == build_abs_path(&self.root, "") {
|
|
249
|
+
Ok(RpStat::new(Metadata::new(EntryMode::DIR)))
|
|
250
|
+
} else {
|
|
251
|
+
// Check the exact path first
|
|
252
|
+
match self.core.get(&p).await? {
|
|
253
|
+
Some(value) => {
|
|
254
|
+
// Use the stored metadata but override mode if necessary
|
|
255
|
+
let mut metadata = value.metadata.clone();
|
|
256
|
+
// If path ends with '/' but we found a file, return DIR
|
|
257
|
+
// This is because CompleteLayer's create_dir creates empty files with '/' suffix
|
|
258
|
+
if p.ends_with('/') && metadata.mode() != EntryMode::DIR {
|
|
259
|
+
metadata.set_mode(EntryMode::DIR);
|
|
260
|
+
}
|
|
261
|
+
Ok(RpStat::new(metadata))
|
|
262
|
+
}
|
|
263
|
+
None => {
|
|
264
|
+
// If path ends with '/', check if there are any children
|
|
265
|
+
if p.ends_with('/') {
|
|
266
|
+
let has_children = self
|
|
267
|
+
.core
|
|
268
|
+
.cache
|
|
269
|
+
.iter()
|
|
270
|
+
.any(|kv| kv.0.starts_with(&p) && kv.0.len() > p.len());
|
|
271
|
+
|
|
272
|
+
if has_children {
|
|
273
|
+
Ok(RpStat::new(Metadata::new(EntryMode::DIR)))
|
|
274
|
+
} else {
|
|
275
|
+
Err(Error::new(ErrorKind::NotFound, "key not found in moka"))
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
Err(Error::new(ErrorKind::NotFound, "key not found in moka"))
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
async fn read(&self, path: &str, args: OpRead) -> Result<(RpRead, Self::Reader)> {
|
|
286
|
+
let p = build_abs_path(&self.root, path);
|
|
287
|
+
|
|
288
|
+
match self.core.get(&p).await? {
|
|
289
|
+
Some(value) => {
|
|
290
|
+
let buffer = if args.range().is_full() {
|
|
291
|
+
value.content
|
|
292
|
+
} else {
|
|
293
|
+
let range = args.range();
|
|
294
|
+
let start = range.offset() as usize;
|
|
295
|
+
let end = match range.size() {
|
|
296
|
+
Some(size) => (range.offset() + size) as usize,
|
|
297
|
+
None => value.content.len(),
|
|
298
|
+
};
|
|
299
|
+
value.content.slice(start..end.min(value.content.len()))
|
|
300
|
+
};
|
|
301
|
+
Ok((RpRead::new(), buffer))
|
|
302
|
+
}
|
|
303
|
+
None => Err(Error::new(ErrorKind::NotFound, "key not found in moka")),
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
async fn write(&self, path: &str, args: OpWrite) -> Result<(RpWrite, Self::Writer)> {
|
|
308
|
+
let p = build_abs_path(&self.root, path);
|
|
309
|
+
Ok((RpWrite::new(), MokaWriter::new(self.core.clone(), p, args)))
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
async fn delete(&self) -> Result<(RpDelete, Self::Deleter)> {
|
|
313
|
+
Ok((
|
|
314
|
+
RpDelete::default(),
|
|
315
|
+
oio::OneShotDeleter::new(MokaDeleter::new(self.core.clone(), self.root.clone())),
|
|
316
|
+
))
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
async fn list(&self, path: &str, args: OpList) -> Result<(RpList, Self::Lister)> {
|
|
320
|
+
// For moka, we don't distinguish between files and directories
|
|
321
|
+
// Just return the lister to iterate through all matching keys
|
|
322
|
+
let lister = MokaLister::new(self.core.clone(), self.root.clone(), path.to_string());
|
|
323
|
+
let lister = oio::HierarchyLister::new(lister, path, args.recursive());
|
|
324
|
+
Ok((RpList::default(), lister))
|
|
325
|
+
}
|
|
326
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
use std::fmt::Formatter;
|
|
20
|
+
use std::time::Duration;
|
|
21
|
+
|
|
22
|
+
use serde::Deserialize;
|
|
23
|
+
use serde::Serialize;
|
|
24
|
+
|
|
25
|
+
/// Config for Moka services support.
|
|
26
|
+
#[derive(Default, Serialize, Deserialize, Clone, PartialEq, Eq)]
|
|
27
|
+
#[serde(default)]
|
|
28
|
+
#[non_exhaustive]
|
|
29
|
+
pub struct MokaConfig {
|
|
30
|
+
/// Name for this cache instance.
|
|
31
|
+
pub name: Option<String>,
|
|
32
|
+
/// Sets the max capacity of the cache.
|
|
33
|
+
///
|
|
34
|
+
/// Refer to [`moka::future::CacheBuilder::max_capacity`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.max_capacity)
|
|
35
|
+
pub max_capacity: Option<u64>,
|
|
36
|
+
/// Sets the time to live of the cache.
|
|
37
|
+
///
|
|
38
|
+
/// Refer to [`moka::future::CacheBuilder::time_to_live`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.time_to_live)
|
|
39
|
+
pub time_to_live: Option<Duration>,
|
|
40
|
+
/// Sets the time to idle of the cache.
|
|
41
|
+
///
|
|
42
|
+
/// Refer to [`moka::future::CacheBuilder::time_to_idle`](https://docs.rs/moka/latest/moka/future/struct.CacheBuilder.html#method.time_to_idle)
|
|
43
|
+
pub time_to_idle: Option<Duration>,
|
|
44
|
+
|
|
45
|
+
/// root path of this backend
|
|
46
|
+
pub root: Option<String>,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
impl Debug for MokaConfig {
|
|
50
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
51
|
+
f.debug_struct("MokaConfig")
|
|
52
|
+
.field("name", &self.name)
|
|
53
|
+
.field("max_capacity", &self.max_capacity)
|
|
54
|
+
.field("time_to_live", &self.time_to_live)
|
|
55
|
+
.field("time_to_idle", &self.time_to_idle)
|
|
56
|
+
.field("root", &self.root)
|
|
57
|
+
.finish_non_exhaustive()
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::fmt::Debug;
|
|
19
|
+
use std::fmt::Formatter;
|
|
20
|
+
|
|
21
|
+
use moka::future::Cache;
|
|
22
|
+
|
|
23
|
+
use crate::*;
|
|
24
|
+
|
|
25
|
+
/// Value stored in moka cache containing both metadata and content
|
|
26
|
+
#[derive(Clone)]
|
|
27
|
+
pub struct MokaValue {
|
|
28
|
+
/// Stored metadata in moka cache.
|
|
29
|
+
pub metadata: Metadata,
|
|
30
|
+
/// Stored content in moka cache.
|
|
31
|
+
pub content: Buffer,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
#[derive(Clone)]
|
|
35
|
+
pub struct MokaCore {
|
|
36
|
+
pub cache: Cache<String, MokaValue>,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
impl Debug for MokaCore {
|
|
40
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
41
|
+
f.debug_struct("MokaCore")
|
|
42
|
+
.field("size", &self.cache.weighted_size())
|
|
43
|
+
.field("count", &self.cache.entry_count())
|
|
44
|
+
.finish()
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
impl MokaCore {
|
|
49
|
+
pub async fn get(&self, key: &str) -> Result<Option<MokaValue>> {
|
|
50
|
+
Ok(self.cache.get(key).await)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
pub async fn set(&self, key: &str, value: MokaValue) -> Result<()> {
|
|
54
|
+
self.cache.insert(key.to_string(), value).await;
|
|
55
|
+
Ok(())
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
pub async fn delete(&self, key: &str) -> Result<()> {
|
|
59
|
+
self.cache.invalidate(key).await;
|
|
60
|
+
Ok(())
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Licensed to the Apache Software Foundation (ASF) under one
|
|
2
|
+
// or more contributor license agreements. See the NOTICE file
|
|
3
|
+
// distributed with this work for additional information
|
|
4
|
+
// regarding copyright ownership. The ASF licenses this file
|
|
5
|
+
// to you under the Apache License, Version 2.0 (the
|
|
6
|
+
// "License"); you may not use this file except in compliance
|
|
7
|
+
// with the License. You may obtain a copy of the License at
|
|
8
|
+
//
|
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
//
|
|
11
|
+
// Unless required by applicable law or agreed to in writing,
|
|
12
|
+
// software distributed under the License is distributed on an
|
|
13
|
+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
14
|
+
// KIND, either express or implied. See the License for the
|
|
15
|
+
// specific language governing permissions and limitations
|
|
16
|
+
// under the License.
|
|
17
|
+
|
|
18
|
+
use std::sync::Arc;
|
|
19
|
+
|
|
20
|
+
use super::core::MokaCore;
|
|
21
|
+
use crate::raw::oio;
|
|
22
|
+
use crate::raw::*;
|
|
23
|
+
use crate::*;
|
|
24
|
+
|
|
25
|
+
pub struct MokaDeleter {
|
|
26
|
+
core: Arc<MokaCore>,
|
|
27
|
+
root: String,
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
impl MokaDeleter {
|
|
31
|
+
pub fn new(core: Arc<MokaCore>, root: String) -> Self {
|
|
32
|
+
Self { core, root }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
impl oio::OneShotDelete for MokaDeleter {
|
|
37
|
+
async fn delete_once(&self, path: String, _: OpDelete) -> Result<()> {
|
|
38
|
+
let p = build_abs_path(&self.root, &path);
|
|
39
|
+
self.core.delete(&p).await?;
|
|
40
|
+
Ok(())
|
|
41
|
+
}
|
|
42
|
+
}
|