opendal 0.1.6.pre.rc.1-aarch64-linux
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/DEPENDENCIES.md +9 -0
- data/DEPENDENCIES.rust.tsv +277 -0
- data/Gemfile +35 -0
- data/README.md +159 -0
- data/Rakefile +149 -0
- data/core/CHANGELOG.md +4929 -0
- data/core/CONTRIBUTING.md +61 -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/types/README.md +9 -0
- data/core/benches/vs_fs/README.md +35 -0
- data/core/benches/vs_s3/README.md +55 -0
- data/core/edge/README.md +3 -0
- data/core/edge/file_write_on_full_disk/README.md +14 -0
- data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
- data/core/edge/s3_read_on_wasm/.gitignore +3 -0
- data/core/edge/s3_read_on_wasm/README.md +42 -0
- data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
- data/core/examples/README.md +23 -0
- data/core/examples/basic/README.md +15 -0
- data/core/examples/concurrent-upload/README.md +15 -0
- data/core/examples/multipart-upload/README.md +15 -0
- data/core/fuzz/.gitignore +5 -0
- data/core/fuzz/README.md +68 -0
- data/core/src/docs/comparisons/vs_object_store.md +183 -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/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/upgrade.md +1556 -0
- data/core/src/services/aliyun_drive/docs.md +61 -0
- data/core/src/services/alluxio/docs.md +45 -0
- data/core/src/services/azblob/docs.md +77 -0
- data/core/src/services/azdls/docs.md +73 -0
- data/core/src/services/azfile/docs.md +65 -0
- data/core/src/services/b2/docs.md +54 -0
- data/core/src/services/cacache/docs.md +38 -0
- data/core/src/services/cloudflare_kv/docs.md +21 -0
- data/core/src/services/cos/docs.md +55 -0
- data/core/src/services/d1/docs.md +48 -0
- data/core/src/services/dashmap/docs.md +38 -0
- data/core/src/services/dbfs/docs.md +57 -0
- data/core/src/services/dropbox/docs.md +64 -0
- data/core/src/services/etcd/docs.md +45 -0
- data/core/src/services/foundationdb/docs.md +42 -0
- data/core/src/services/fs/docs.md +49 -0
- data/core/src/services/ftp/docs.md +42 -0
- data/core/src/services/gcs/docs.md +76 -0
- data/core/src/services/gdrive/docs.md +65 -0
- data/core/src/services/ghac/docs.md +84 -0
- data/core/src/services/github/docs.md +52 -0
- data/core/src/services/gridfs/docs.md +46 -0
- data/core/src/services/hdfs/docs.md +140 -0
- data/core/src/services/hdfs_native/docs.md +35 -0
- data/core/src/services/http/docs.md +45 -0
- data/core/src/services/huggingface/docs.md +61 -0
- data/core/src/services/ipfs/docs.md +45 -0
- data/core/src/services/ipmfs/docs.md +14 -0
- data/core/src/services/koofr/docs.md +51 -0
- data/core/src/services/lakefs/docs.md +62 -0
- data/core/src/services/memcached/docs.md +47 -0
- data/core/src/services/memory/docs.md +36 -0
- data/core/src/services/mini_moka/docs.md +19 -0
- data/core/src/services/moka/docs.md +42 -0
- data/core/src/services/mongodb/docs.md +49 -0
- data/core/src/services/monoiofs/docs.md +46 -0
- data/core/src/services/mysql/docs.md +47 -0
- data/core/src/services/obs/docs.md +54 -0
- data/core/src/services/onedrive/docs.md +115 -0
- data/core/src/services/opfs/docs.md +18 -0
- data/core/src/services/oss/docs.md +74 -0
- data/core/src/services/pcloud/docs.md +51 -0
- data/core/src/services/persy/docs.md +43 -0
- data/core/src/services/postgresql/docs.md +47 -0
- data/core/src/services/redb/docs.md +41 -0
- data/core/src/services/redis/docs.md +43 -0
- data/core/src/services/rocksdb/docs.md +54 -0
- data/core/src/services/s3/compatible_services.md +126 -0
- data/core/src/services/s3/docs.md +244 -0
- data/core/src/services/seafile/docs.md +54 -0
- data/core/src/services/sftp/docs.md +49 -0
- data/core/src/services/sled/docs.md +39 -0
- data/core/src/services/sqlite/docs.md +46 -0
- data/core/src/services/surrealdb/docs.md +54 -0
- data/core/src/services/swift/compatible_services.md +53 -0
- data/core/src/services/swift/docs.md +52 -0
- data/core/src/services/tikv/docs.md +43 -0
- data/core/src/services/upyun/docs.md +51 -0
- data/core/src/services/vercel_artifacts/docs.md +40 -0
- data/core/src/services/vercel_blob/docs.md +45 -0
- data/core/src/services/webdav/docs.md +49 -0
- data/core/src/services/webhdfs/docs.md +90 -0
- data/core/src/services/yandex_disk/docs.md +45 -0
- data/core/tests/behavior/README.md +77 -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/opendal_ruby.so +0 -0
- data/lib/opendal_ruby/operator.rb +29 -0
- data/lib/opendal_ruby/operator_info.rb +26 -0
- data/opendal.gemspec +91 -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 +240 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [ ] ~~write~~
|
|
8
|
+
- [ ] ~~create_dir~~
|
|
9
|
+
- [ ] ~~delete~~
|
|
10
|
+
- [ ] ~~copy~~
|
|
11
|
+
- [ ] ~~rename~~
|
|
12
|
+
- [ ] ~~list~~
|
|
13
|
+
- [ ] ~~presign~~
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Notes
|
|
17
|
+
|
|
18
|
+
Only `read` and `stat` are supported. We can use this service to visit any
|
|
19
|
+
HTTP Server like nginx, caddy.
|
|
20
|
+
|
|
21
|
+
## Configuration
|
|
22
|
+
|
|
23
|
+
- `endpoint`: set the endpoint for http
|
|
24
|
+
- `root`: Set the work directory for backend
|
|
25
|
+
|
|
26
|
+
You can refer to [`HttpBuilder`]'s docs for more information
|
|
27
|
+
|
|
28
|
+
## Example
|
|
29
|
+
|
|
30
|
+
### Via Builder
|
|
31
|
+
|
|
32
|
+
```rust,no_run
|
|
33
|
+
use anyhow::Result;
|
|
34
|
+
use opendal::services::Http;
|
|
35
|
+
use opendal::Operator;
|
|
36
|
+
|
|
37
|
+
#[tokio::main]
|
|
38
|
+
async fn main() -> Result<()> {
|
|
39
|
+
// create http backend builder
|
|
40
|
+
let mut builder = Http::default().endpoint("127.0.0.1");
|
|
41
|
+
|
|
42
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
43
|
+
Ok(())
|
|
44
|
+
}
|
|
45
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
This service will visit the [Huggingface API](https://huggingface.co/docs/huggingface_hub/package_reference/hf_api) to access the Huggingface File System.
|
|
2
|
+
Currently, we only support the `model` and `dataset` types of repositories, and operations are limited to reading and listing/stating.
|
|
3
|
+
|
|
4
|
+
Huggingface doesn't host official HTTP API docs. Detailed HTTP request API information can be found on the [`huggingface_hub` Source Code](https://github.com/huggingface/huggingface_hub).
|
|
5
|
+
|
|
6
|
+
## Capabilities
|
|
7
|
+
|
|
8
|
+
This service can be used to:
|
|
9
|
+
|
|
10
|
+
- [x] stat
|
|
11
|
+
- [x] read
|
|
12
|
+
- [ ] write
|
|
13
|
+
- [ ] create_dir
|
|
14
|
+
- [ ] delete
|
|
15
|
+
- [ ] copy
|
|
16
|
+
- [ ] rename
|
|
17
|
+
- [x] list
|
|
18
|
+
- [ ] ~~presign~~
|
|
19
|
+
- [ ] blocking
|
|
20
|
+
|
|
21
|
+
## Configurations
|
|
22
|
+
|
|
23
|
+
- `repo_type`: The type of the repository.
|
|
24
|
+
- `repo_id`: The id of the repository.
|
|
25
|
+
- `revision`: The revision of the repository.
|
|
26
|
+
- `root`: Set the work directory for backend.
|
|
27
|
+
- `token`: The token for accessing the repository.
|
|
28
|
+
|
|
29
|
+
Refer to [`HuggingfaceBuilder`]'s public API docs for more information.
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### Via Builder
|
|
34
|
+
|
|
35
|
+
```rust,no_run
|
|
36
|
+
use std::sync::Arc;
|
|
37
|
+
|
|
38
|
+
use anyhow::Result;
|
|
39
|
+
use opendal::services::Huggingface;
|
|
40
|
+
use opendal::Operator;
|
|
41
|
+
|
|
42
|
+
#[tokio::main]
|
|
43
|
+
async fn main() -> Result<()> {
|
|
44
|
+
// Create Huggingface backend builder
|
|
45
|
+
let mut builder = Huggingface::default()
|
|
46
|
+
// set the type of Huggingface repository
|
|
47
|
+
.repo_type("dataset")
|
|
48
|
+
// set the id of Huggingface repository
|
|
49
|
+
.repo_id("databricks/databricks-dolly-15k")
|
|
50
|
+
// set the revision of Huggingface repository
|
|
51
|
+
.revision("main")
|
|
52
|
+
// set the root for Huggingface, all operations will happen under this root
|
|
53
|
+
.root("/path/to/dir")
|
|
54
|
+
// set the token for accessing the repository
|
|
55
|
+
.token("access_token");
|
|
56
|
+
|
|
57
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
58
|
+
|
|
59
|
+
Ok(())
|
|
60
|
+
}
|
|
61
|
+
```
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [ ] ~~write~~
|
|
8
|
+
- [ ] ~~create_dir~~
|
|
9
|
+
- [ ] ~~delete~~
|
|
10
|
+
- [ ] ~~copy~~
|
|
11
|
+
- [ ] ~~rename~~
|
|
12
|
+
- [x] list
|
|
13
|
+
- [ ] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the work directory for backend
|
|
19
|
+
- `endpoint`: Customizable endpoint setting
|
|
20
|
+
|
|
21
|
+
You can refer to [`IpfsBuilder`]'s docs for more information
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
### Via Builder
|
|
26
|
+
|
|
27
|
+
```rust,no_run
|
|
28
|
+
use anyhow::Result;
|
|
29
|
+
use opendal::services::Ipfs;
|
|
30
|
+
use opendal::Operator;
|
|
31
|
+
|
|
32
|
+
#[tokio::main]
|
|
33
|
+
async fn main() -> Result<()> {
|
|
34
|
+
// create backend builder
|
|
35
|
+
let mut builder = Ipfs::default()
|
|
36
|
+
// set the endpoint for OpenDAL
|
|
37
|
+
.endpoint("https://ipfs.io")
|
|
38
|
+
// set the root for OpenDAL
|
|
39
|
+
.root("/ipfs/QmPpCt1aYGb9JWJRmXRUnmJtVgeFFTJGzWFYEEX7bo9zGJ");
|
|
40
|
+
|
|
41
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
42
|
+
|
|
43
|
+
Ok(())
|
|
44
|
+
}
|
|
45
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [x] copy
|
|
11
|
+
- [x] rename
|
|
12
|
+
- [x] list
|
|
13
|
+
- [ ] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the work directory for backend
|
|
19
|
+
- `endpoint`: Koofr endpoint
|
|
20
|
+
- `email` Koofr email
|
|
21
|
+
- `password` Koofr password
|
|
22
|
+
|
|
23
|
+
You can refer to [`KoofrBuilder`]'s docs for more information
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
|
|
27
|
+
### Via Builder
|
|
28
|
+
|
|
29
|
+
```rust,no_run
|
|
30
|
+
use anyhow::Result;
|
|
31
|
+
use opendal::services::Koofr;
|
|
32
|
+
use opendal::Operator;
|
|
33
|
+
|
|
34
|
+
#[tokio::main]
|
|
35
|
+
async fn main() -> Result<()> {
|
|
36
|
+
// create backend builder
|
|
37
|
+
let mut builder = Koofr::default()
|
|
38
|
+
// set the storage bucket for OpenDAL
|
|
39
|
+
.root("/")
|
|
40
|
+
// set the bucket for OpenDAL
|
|
41
|
+
.endpoint("https://api.koofr.net/")
|
|
42
|
+
// set the email for OpenDAL
|
|
43
|
+
.email("me@example.com")
|
|
44
|
+
// set the password for OpenDAL
|
|
45
|
+
.password("xxx xxx xxx xxx");
|
|
46
|
+
|
|
47
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
48
|
+
|
|
49
|
+
Ok(())
|
|
50
|
+
}
|
|
51
|
+
```
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
This service will visit the [Lakefs API](https://Lakefs.co/docs/Lakefs_hub/package_reference/hf_api) to access the Lakefs File System.
|
|
2
|
+
Currently, we only support the `model` and `dataset` types of repositories, and operations are limited to reading and listing/stating.
|
|
3
|
+
|
|
4
|
+
Lakefs doesn't host official HTTP API docs. Detailed HTTP request API information can be found on the [`Lakefs_hub` Source Code](https://github.com/Lakefs/Lakefs_hub).
|
|
5
|
+
|
|
6
|
+
## Capabilities
|
|
7
|
+
|
|
8
|
+
This service can be used to:
|
|
9
|
+
|
|
10
|
+
- [x] stat
|
|
11
|
+
- [x] read
|
|
12
|
+
- [x] write
|
|
13
|
+
- [ ] create_dir
|
|
14
|
+
- [x] delete
|
|
15
|
+
- [x] copy
|
|
16
|
+
- [ ] rename
|
|
17
|
+
- [x] list
|
|
18
|
+
- [ ] ~~presign~~
|
|
19
|
+
- [ ] blocking
|
|
20
|
+
|
|
21
|
+
## Configurations
|
|
22
|
+
|
|
23
|
+
- `endpoint`: The endpoint of the Lakefs repository.
|
|
24
|
+
- `repository`: The id of the repository.
|
|
25
|
+
- `branch`: The branch of the repository.
|
|
26
|
+
- `root`: Set the work directory for backend.
|
|
27
|
+
- `username`: The username for accessing the repository.
|
|
28
|
+
- `password`: The password for accessing the repository.
|
|
29
|
+
|
|
30
|
+
Refer to [`LakefsBuilder`]'s public API docs for more information.
|
|
31
|
+
|
|
32
|
+
## Examples
|
|
33
|
+
|
|
34
|
+
### Via Builder
|
|
35
|
+
|
|
36
|
+
```rust,no_run
|
|
37
|
+
use opendal::Operator;
|
|
38
|
+
use opendal::services::Lakefs;
|
|
39
|
+
use anyhow::Result;
|
|
40
|
+
|
|
41
|
+
#[tokio::main]
|
|
42
|
+
async fn main() -> Result<()> {
|
|
43
|
+
// Create Lakefs backend builder
|
|
44
|
+
let mut builder = Lakefs::default()
|
|
45
|
+
// set the type of Lakefs endpoint
|
|
46
|
+
.endpoint("https://whole-llama-mh6mux.us-east-1.lakefscloud.io")
|
|
47
|
+
// set the id of Lakefs repository
|
|
48
|
+
.repository("sample-repo")
|
|
49
|
+
// set the branch of Lakefs repository
|
|
50
|
+
.branch("main")
|
|
51
|
+
// set the username for accessing the repository
|
|
52
|
+
.username("xxx")
|
|
53
|
+
// set the password for accessing the repository
|
|
54
|
+
.password("xxx");
|
|
55
|
+
|
|
56
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
57
|
+
|
|
58
|
+
let stat = op.stat("README.md").await?;
|
|
59
|
+
println!("{:?}", stat);
|
|
60
|
+
Ok(())
|
|
61
|
+
}
|
|
62
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [ ] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [ ] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [ ] ~~list~~
|
|
13
|
+
- [ ] ~~presign~~
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the working directory of `OpenDAL`
|
|
19
|
+
- `username`: Set the username for authentication.
|
|
20
|
+
- `password`: Set the password for authentication.
|
|
21
|
+
- `endpoint`: Set the network address of memcached server
|
|
22
|
+
- `default_ttl`: Set the ttl for memcached service.
|
|
23
|
+
|
|
24
|
+
You can refer to [`MemcachedBuilder`]'s docs for more information
|
|
25
|
+
|
|
26
|
+
## Example
|
|
27
|
+
|
|
28
|
+
### Via Builder
|
|
29
|
+
|
|
30
|
+
```rust,no_run
|
|
31
|
+
use anyhow::Result;
|
|
32
|
+
use opendal::services::Memcached;
|
|
33
|
+
use opendal::Operator;
|
|
34
|
+
|
|
35
|
+
#[tokio::main]
|
|
36
|
+
async fn main() -> Result<()> {
|
|
37
|
+
// create memcached backend builder
|
|
38
|
+
let mut builder = Memcached::default()
|
|
39
|
+
.endpoint("tcp://127.0.0.1:11211");
|
|
40
|
+
// if you enable authentication, set username and password for authentication
|
|
41
|
+
// builder.username("admin")
|
|
42
|
+
// builder.password("password");
|
|
43
|
+
|
|
44
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
45
|
+
Ok(())
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [x] copy
|
|
11
|
+
- [x] rename
|
|
12
|
+
- [ ] list
|
|
13
|
+
- [ ] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Example
|
|
17
|
+
|
|
18
|
+
### Via Builder
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
```rust,no_run
|
|
22
|
+
use std::sync::Arc;
|
|
23
|
+
|
|
24
|
+
use anyhow::Result;
|
|
25
|
+
use opendal::services::Memory;
|
|
26
|
+
use opendal::Operator;
|
|
27
|
+
|
|
28
|
+
#[tokio::main]
|
|
29
|
+
async fn main() -> Result<()> {
|
|
30
|
+
let mut builder = Memory::default().root("/tmp");
|
|
31
|
+
|
|
32
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
33
|
+
|
|
34
|
+
Ok(())
|
|
35
|
+
}
|
|
36
|
+
```
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [ ] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [ ] list
|
|
13
|
+
- [ ] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Notes
|
|
17
|
+
|
|
18
|
+
To better assist you in choosing the right cache for your use case,
|
|
19
|
+
Here's a comparison table with [moka](https://github.com/moka-rs/moka#choosing-the-right-cache-for-your-use-case)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [ ] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [ ] list
|
|
13
|
+
- [ ] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `name`: Set the name for this cache instance.
|
|
19
|
+
- `max_capacity`: Set the max capacity of the cache.
|
|
20
|
+
- `time_to_live`: Set the time to live of the cache.
|
|
21
|
+
- `time_to_idle`: Set the time to idle of the cache.
|
|
22
|
+
|
|
23
|
+
You can refer to [`MokaBuilder`]'s docs for more information
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
|
|
27
|
+
### Via Builder
|
|
28
|
+
|
|
29
|
+
```rust,no_run
|
|
30
|
+
use anyhow::Result;
|
|
31
|
+
use opendal::services::Moka;
|
|
32
|
+
use opendal::Operator;
|
|
33
|
+
|
|
34
|
+
#[tokio::main]
|
|
35
|
+
async fn main() -> Result<()> {
|
|
36
|
+
let mut builder = Moka::default()
|
|
37
|
+
.name("opendal");
|
|
38
|
+
|
|
39
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
40
|
+
Ok(())
|
|
41
|
+
}
|
|
42
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [ ] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [ ] ~~list~~
|
|
13
|
+
- [ ] ~~presign~~
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the working directory of `OpenDAL`
|
|
19
|
+
- `connection_string`: Set the connection string of mongodb server
|
|
20
|
+
- `database`: Set the database of mongodb
|
|
21
|
+
- `collection`: Set the collection of mongodb
|
|
22
|
+
- `key_field`: Set the key field of mongodb
|
|
23
|
+
- `value_field`: Set the value field of mongodb
|
|
24
|
+
|
|
25
|
+
## Example
|
|
26
|
+
|
|
27
|
+
### Via Builder
|
|
28
|
+
|
|
29
|
+
```rust,no_run
|
|
30
|
+
use anyhow::Result;
|
|
31
|
+
use opendal::services::Mongodb;
|
|
32
|
+
use opendal::Operator;
|
|
33
|
+
|
|
34
|
+
#[tokio::main]
|
|
35
|
+
async fn main() -> Result<()> {
|
|
36
|
+
let mut builder = Mongodb::default()
|
|
37
|
+
.root("/")
|
|
38
|
+
.connection_string("mongodb://myUser:myPassword@localhost:27017/myAuthDB")
|
|
39
|
+
.database("your_database")
|
|
40
|
+
.collection("your_collection")
|
|
41
|
+
// key field type in the table should be compatible with Rust's &str like text
|
|
42
|
+
.key_field("key")
|
|
43
|
+
// value field type in the table should be compatible with Rust's Vec<u8> like bytea
|
|
44
|
+
.value_field("value");
|
|
45
|
+
|
|
46
|
+
let op = Operator::new(builder)?.finish();
|
|
47
|
+
Ok(())
|
|
48
|
+
}
|
|
49
|
+
```
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] append
|
|
9
|
+
- [x] create_dir
|
|
10
|
+
- [x] delete
|
|
11
|
+
- [x] copy
|
|
12
|
+
- [x] rename
|
|
13
|
+
- [ ] list
|
|
14
|
+
- [ ] ~~presign~~
|
|
15
|
+
- [ ] blocking
|
|
16
|
+
|
|
17
|
+
## Configuration
|
|
18
|
+
|
|
19
|
+
- `root`: Set the work dir for backend.
|
|
20
|
+
|
|
21
|
+
You can refer to [`MonoiofsBuilder`]'s docs for more information
|
|
22
|
+
|
|
23
|
+
## Example
|
|
24
|
+
|
|
25
|
+
### Via Builder
|
|
26
|
+
|
|
27
|
+
```rust,no_run
|
|
28
|
+
use anyhow::Result;
|
|
29
|
+
use opendal::services::Monoiofs;
|
|
30
|
+
use opendal::Operator;
|
|
31
|
+
|
|
32
|
+
#[tokio::main]
|
|
33
|
+
async fn main() -> Result<()> {
|
|
34
|
+
// Create monoiofs backend builder.
|
|
35
|
+
let mut builder = Monoiofs::default()
|
|
36
|
+
// Set the root for monoiofs, all operations will happen under this root.
|
|
37
|
+
//
|
|
38
|
+
// NOTE: the root must be absolute path.
|
|
39
|
+
.root("/tmp");
|
|
40
|
+
|
|
41
|
+
// `Accessor` provides the low level APIs, we will use `Operator` normally.
|
|
42
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
43
|
+
|
|
44
|
+
Ok(())
|
|
45
|
+
}
|
|
46
|
+
```
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [ ] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [ ] ~~list~~
|
|
13
|
+
- [ ] ~~presign~~
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the working directory of `OpenDAL`
|
|
19
|
+
- `connection_string`: Set the connection string of mysql server
|
|
20
|
+
- `table`: Set the table of mysql
|
|
21
|
+
- `key_field`: Set the key field of mysql
|
|
22
|
+
- `value_field`: Set the value field of mysql
|
|
23
|
+
|
|
24
|
+
## Example
|
|
25
|
+
|
|
26
|
+
### Via Builder
|
|
27
|
+
|
|
28
|
+
```rust,no_run
|
|
29
|
+
use anyhow::Result;
|
|
30
|
+
use opendal::services::Mysql;
|
|
31
|
+
use opendal::Operator;
|
|
32
|
+
|
|
33
|
+
#[tokio::main]
|
|
34
|
+
async fn main() -> Result<()> {
|
|
35
|
+
let mut builder = Mysql::default()
|
|
36
|
+
.root("/")
|
|
37
|
+
.connection_string("mysql://you_username:your_password@127.0.0.1:5432/your_database")
|
|
38
|
+
.table("your_table")
|
|
39
|
+
// key field type in the table should be compatible with Rust's &str like text
|
|
40
|
+
.key_field("key")
|
|
41
|
+
// value field type in the table should be compatible with Rust's Vec<u8> like bytea
|
|
42
|
+
.value_field("value");
|
|
43
|
+
|
|
44
|
+
let op = Operator::new(builder)?.finish();
|
|
45
|
+
Ok(())
|
|
46
|
+
}
|
|
47
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
## Capabilities
|
|
2
|
+
|
|
3
|
+
This service can be used to:
|
|
4
|
+
|
|
5
|
+
- [x] stat
|
|
6
|
+
- [x] read
|
|
7
|
+
- [x] write
|
|
8
|
+
- [x] create_dir
|
|
9
|
+
- [x] delete
|
|
10
|
+
- [x] copy
|
|
11
|
+
- [ ] rename
|
|
12
|
+
- [x] list
|
|
13
|
+
- [x] presign
|
|
14
|
+
- [ ] blocking
|
|
15
|
+
|
|
16
|
+
## Configuration
|
|
17
|
+
|
|
18
|
+
- `root`: Set the work directory for backend
|
|
19
|
+
- `bucket`: Set the container name for backend
|
|
20
|
+
- `endpoint`: Customizable endpoint setting
|
|
21
|
+
- `access_key_id`: Set the access_key_id for backend.
|
|
22
|
+
- `secret_access_key`: Set the secret_access_key for backend.
|
|
23
|
+
|
|
24
|
+
You can refer to [`ObsBuilder`]'s docs for more information
|
|
25
|
+
|
|
26
|
+
## Example
|
|
27
|
+
|
|
28
|
+
### Via Builder
|
|
29
|
+
|
|
30
|
+
```rust,no_run
|
|
31
|
+
use anyhow::Result;
|
|
32
|
+
use opendal::services::Obs;
|
|
33
|
+
use opendal::Operator;
|
|
34
|
+
|
|
35
|
+
#[tokio::main]
|
|
36
|
+
async fn main() -> Result<()> {
|
|
37
|
+
// create backend builder
|
|
38
|
+
let mut builder = Obs::default()
|
|
39
|
+
// set the storage bucket for OpenDAL
|
|
40
|
+
.bucket("test")
|
|
41
|
+
.endpoint("obs.cn-north-1.myhuaweicloud.com")
|
|
42
|
+
// Set the access_key_id and secret_access_key.
|
|
43
|
+
//
|
|
44
|
+
// OpenDAL will try load credential from the env.
|
|
45
|
+
// If credential not set and no valid credential in env, OpenDAL will
|
|
46
|
+
// send request without signing like anonymous user.
|
|
47
|
+
.access_key_id("access_key_id")
|
|
48
|
+
.secret_access_key("secret_access_key");
|
|
49
|
+
|
|
50
|
+
let op: Operator = Operator::new(builder)?.finish();
|
|
51
|
+
|
|
52
|
+
Ok(())
|
|
53
|
+
}
|
|
54
|
+
```
|