opendal 0.1.6.pre.rc.1-arm64-darwin-23

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.
Files changed (191) hide show
  1. checksums.yaml +7 -0
  2. data/.standard.yml +20 -0
  3. data/.tool-versions +1 -0
  4. data/.yardopts +1 -0
  5. data/DEPENDENCIES.md +9 -0
  6. data/DEPENDENCIES.rust.tsv +277 -0
  7. data/Gemfile +35 -0
  8. data/README.md +159 -0
  9. data/Rakefile +149 -0
  10. data/core/CHANGELOG.md +4929 -0
  11. data/core/CONTRIBUTING.md +61 -0
  12. data/core/DEPENDENCIES.md +3 -0
  13. data/core/DEPENDENCIES.rust.tsv +185 -0
  14. data/core/LICENSE +201 -0
  15. data/core/README.md +228 -0
  16. data/core/benches/README.md +18 -0
  17. data/core/benches/ops/README.md +26 -0
  18. data/core/benches/types/README.md +9 -0
  19. data/core/benches/vs_fs/README.md +35 -0
  20. data/core/benches/vs_s3/README.md +55 -0
  21. data/core/edge/README.md +3 -0
  22. data/core/edge/file_write_on_full_disk/README.md +14 -0
  23. data/core/edge/s3_aws_assume_role_with_web_identity/README.md +18 -0
  24. data/core/edge/s3_read_on_wasm/.gitignore +3 -0
  25. data/core/edge/s3_read_on_wasm/README.md +42 -0
  26. data/core/edge/s3_read_on_wasm/webdriver.json +15 -0
  27. data/core/examples/README.md +23 -0
  28. data/core/examples/basic/README.md +15 -0
  29. data/core/examples/concurrent-upload/README.md +15 -0
  30. data/core/examples/multipart-upload/README.md +15 -0
  31. data/core/fuzz/.gitignore +5 -0
  32. data/core/fuzz/README.md +68 -0
  33. data/core/src/docs/comparisons/vs_object_store.md +183 -0
  34. data/core/src/docs/performance/concurrent_write.md +101 -0
  35. data/core/src/docs/performance/http_optimization.md +124 -0
  36. data/core/src/docs/rfcs/0000_example.md +74 -0
  37. data/core/src/docs/rfcs/0000_foyer_integration.md +111 -0
  38. data/core/src/docs/rfcs/0041_object_native_api.md +185 -0
  39. data/core/src/docs/rfcs/0044_error_handle.md +198 -0
  40. data/core/src/docs/rfcs/0057_auto_region.md +160 -0
  41. data/core/src/docs/rfcs/0069_object_stream.md +145 -0
  42. data/core/src/docs/rfcs/0090_limited_reader.md +155 -0
  43. data/core/src/docs/rfcs/0112_path_normalization.md +79 -0
  44. data/core/src/docs/rfcs/0191_async_streaming_io.md +328 -0
  45. data/core/src/docs/rfcs/0203_remove_credential.md +96 -0
  46. data/core/src/docs/rfcs/0221_create_dir.md +89 -0
  47. data/core/src/docs/rfcs/0247_retryable_error.md +87 -0
  48. data/core/src/docs/rfcs/0293_object_id.md +67 -0
  49. data/core/src/docs/rfcs/0337_dir_entry.md +191 -0
  50. data/core/src/docs/rfcs/0409_accessor_capabilities.md +67 -0
  51. data/core/src/docs/rfcs/0413_presign.md +154 -0
  52. data/core/src/docs/rfcs/0423_command_line_interface.md +268 -0
  53. data/core/src/docs/rfcs/0429_init_from_iter.md +107 -0
  54. data/core/src/docs/rfcs/0438_multipart.md +163 -0
  55. data/core/src/docs/rfcs/0443_gateway.md +73 -0
  56. data/core/src/docs/rfcs/0501_new_builder.md +111 -0
  57. data/core/src/docs/rfcs/0554_write_refactor.md +96 -0
  58. data/core/src/docs/rfcs/0561_list_metadata_reuse.md +210 -0
  59. data/core/src/docs/rfcs/0599_blocking_api.md +157 -0
  60. data/core/src/docs/rfcs/0623_redis_service.md +300 -0
  61. data/core/src/docs/rfcs/0627_split_capabilities.md +89 -0
  62. data/core/src/docs/rfcs/0661_path_in_accessor.md +126 -0
  63. data/core/src/docs/rfcs/0793_generic_kv_services.md +209 -0
  64. data/core/src/docs/rfcs/0926_object_reader.md +93 -0
  65. data/core/src/docs/rfcs/0977_refactor_error.md +151 -0
  66. data/core/src/docs/rfcs/1085_object_handler.md +73 -0
  67. data/core/src/docs/rfcs/1391_object_metadataer.md +110 -0
  68. data/core/src/docs/rfcs/1398_query_based_metadata.md +125 -0
  69. data/core/src/docs/rfcs/1420_object_writer.md +147 -0
  70. data/core/src/docs/rfcs/1477_remove_object_concept.md +159 -0
  71. data/core/src/docs/rfcs/1735_operation_extension.md +117 -0
  72. data/core/src/docs/rfcs/2083_writer_sink_api.md +106 -0
  73. data/core/src/docs/rfcs/2133_append_api.md +88 -0
  74. data/core/src/docs/rfcs/2299_chain_based_operator_api.md +99 -0
  75. data/core/src/docs/rfcs/2602_object_versioning.md +138 -0
  76. data/core/src/docs/rfcs/2758_merge_append_into_write.md +79 -0
  77. data/core/src/docs/rfcs/2774_lister_api.md +66 -0
  78. data/core/src/docs/rfcs/2779_list_with_metakey.md +143 -0
  79. data/core/src/docs/rfcs/2852_native_capability.md +58 -0
  80. data/core/src/docs/rfcs/2884_merge_range_read_into_read.md +80 -0
  81. data/core/src/docs/rfcs/3017_remove_write_copy_from.md +94 -0
  82. data/core/src/docs/rfcs/3197_config.md +237 -0
  83. data/core/src/docs/rfcs/3232_align_list_api.md +69 -0
  84. data/core/src/docs/rfcs/3243_list_prefix.md +128 -0
  85. data/core/src/docs/rfcs/3356_lazy_reader.md +111 -0
  86. data/core/src/docs/rfcs/3526_list_recursive.md +59 -0
  87. data/core/src/docs/rfcs/3574_concurrent_stat_in_list.md +80 -0
  88. data/core/src/docs/rfcs/3734_buffered_reader.md +64 -0
  89. data/core/src/docs/rfcs/3898_concurrent_writer.md +66 -0
  90. data/core/src/docs/rfcs/3911_deleter_api.md +165 -0
  91. data/core/src/docs/rfcs/4382_range_based_read.md +213 -0
  92. data/core/src/docs/rfcs/4638_executor.md +215 -0
  93. data/core/src/docs/rfcs/5314_remove_metakey.md +120 -0
  94. data/core/src/docs/rfcs/5444_operator_from_uri.md +162 -0
  95. data/core/src/docs/rfcs/5479_context.md +140 -0
  96. data/core/src/docs/rfcs/5485_conditional_reader.md +112 -0
  97. data/core/src/docs/rfcs/5495_list_with_deleted.md +81 -0
  98. data/core/src/docs/rfcs/5556_write_returns_metadata.md +121 -0
  99. data/core/src/docs/rfcs/5871_read_returns_metadata.md +112 -0
  100. data/core/src/docs/rfcs/6189_remove_native_blocking.md +106 -0
  101. data/core/src/docs/rfcs/6209_glob_support.md +132 -0
  102. data/core/src/docs/rfcs/6213_options_api.md +142 -0
  103. data/core/src/docs/rfcs/README.md +62 -0
  104. data/core/src/docs/upgrade.md +1556 -0
  105. data/core/src/services/aliyun_drive/docs.md +61 -0
  106. data/core/src/services/alluxio/docs.md +45 -0
  107. data/core/src/services/azblob/docs.md +77 -0
  108. data/core/src/services/azdls/docs.md +73 -0
  109. data/core/src/services/azfile/docs.md +65 -0
  110. data/core/src/services/b2/docs.md +54 -0
  111. data/core/src/services/cacache/docs.md +38 -0
  112. data/core/src/services/cloudflare_kv/docs.md +21 -0
  113. data/core/src/services/cos/docs.md +55 -0
  114. data/core/src/services/d1/docs.md +48 -0
  115. data/core/src/services/dashmap/docs.md +38 -0
  116. data/core/src/services/dbfs/docs.md +57 -0
  117. data/core/src/services/dropbox/docs.md +64 -0
  118. data/core/src/services/etcd/docs.md +45 -0
  119. data/core/src/services/foundationdb/docs.md +42 -0
  120. data/core/src/services/fs/docs.md +49 -0
  121. data/core/src/services/ftp/docs.md +42 -0
  122. data/core/src/services/gcs/docs.md +76 -0
  123. data/core/src/services/gdrive/docs.md +65 -0
  124. data/core/src/services/ghac/docs.md +84 -0
  125. data/core/src/services/github/docs.md +52 -0
  126. data/core/src/services/gridfs/docs.md +46 -0
  127. data/core/src/services/hdfs/docs.md +140 -0
  128. data/core/src/services/hdfs_native/docs.md +35 -0
  129. data/core/src/services/http/docs.md +45 -0
  130. data/core/src/services/huggingface/docs.md +61 -0
  131. data/core/src/services/ipfs/docs.md +45 -0
  132. data/core/src/services/ipmfs/docs.md +14 -0
  133. data/core/src/services/koofr/docs.md +51 -0
  134. data/core/src/services/lakefs/docs.md +62 -0
  135. data/core/src/services/memcached/docs.md +47 -0
  136. data/core/src/services/memory/docs.md +36 -0
  137. data/core/src/services/mini_moka/docs.md +19 -0
  138. data/core/src/services/moka/docs.md +42 -0
  139. data/core/src/services/mongodb/docs.md +49 -0
  140. data/core/src/services/monoiofs/docs.md +46 -0
  141. data/core/src/services/mysql/docs.md +47 -0
  142. data/core/src/services/obs/docs.md +54 -0
  143. data/core/src/services/onedrive/docs.md +115 -0
  144. data/core/src/services/opfs/docs.md +18 -0
  145. data/core/src/services/oss/docs.md +74 -0
  146. data/core/src/services/pcloud/docs.md +51 -0
  147. data/core/src/services/persy/docs.md +43 -0
  148. data/core/src/services/postgresql/docs.md +47 -0
  149. data/core/src/services/redb/docs.md +41 -0
  150. data/core/src/services/redis/docs.md +43 -0
  151. data/core/src/services/rocksdb/docs.md +54 -0
  152. data/core/src/services/s3/compatible_services.md +126 -0
  153. data/core/src/services/s3/docs.md +244 -0
  154. data/core/src/services/seafile/docs.md +54 -0
  155. data/core/src/services/sftp/docs.md +49 -0
  156. data/core/src/services/sled/docs.md +39 -0
  157. data/core/src/services/sqlite/docs.md +46 -0
  158. data/core/src/services/surrealdb/docs.md +54 -0
  159. data/core/src/services/swift/compatible_services.md +53 -0
  160. data/core/src/services/swift/docs.md +52 -0
  161. data/core/src/services/tikv/docs.md +43 -0
  162. data/core/src/services/upyun/docs.md +51 -0
  163. data/core/src/services/vercel_artifacts/docs.md +40 -0
  164. data/core/src/services/vercel_blob/docs.md +45 -0
  165. data/core/src/services/webdav/docs.md +49 -0
  166. data/core/src/services/webhdfs/docs.md +90 -0
  167. data/core/src/services/yandex_disk/docs.md +45 -0
  168. data/core/tests/behavior/README.md +77 -0
  169. data/core/tests/data/normal_dir/.gitkeep +0 -0
  170. data/core/tests/data/normal_file.txt +1041 -0
  171. data/core/tests/data/special_dir !@#$%^&()_+-=;',/.gitkeep +0 -0
  172. data/core/tests/data/special_file !@#$%^&()_+-=;',.txt +1041 -0
  173. data/core/users.md +13 -0
  174. data/extconf.rb +24 -0
  175. data/lib/opendal.rb +25 -0
  176. data/lib/opendal_ruby/entry.rb +35 -0
  177. data/lib/opendal_ruby/io.rb +70 -0
  178. data/lib/opendal_ruby/metadata.rb +44 -0
  179. data/lib/opendal_ruby/opendal_ruby.bundle +0 -0
  180. data/lib/opendal_ruby/operator.rb +29 -0
  181. data/lib/opendal_ruby/operator_info.rb +26 -0
  182. data/opendal.gemspec +91 -0
  183. data/test/blocking_op_test.rb +112 -0
  184. data/test/capability_test.rb +42 -0
  185. data/test/io_test.rb +172 -0
  186. data/test/lister_test.rb +77 -0
  187. data/test/metadata_test.rb +78 -0
  188. data/test/middlewares_test.rb +46 -0
  189. data/test/operator_info_test.rb +35 -0
  190. data/test/test_helper.rb +36 -0
  191. metadata +240 -0
@@ -0,0 +1,244 @@
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
+ - [ ] rename
13
+ - [x] list
14
+ - [x] presign
15
+ - [ ] blocking
16
+
17
+ ## Configuration
18
+
19
+ - `root`: Set the work dir for backend.
20
+ - `bucket`: Set the container name for backend.
21
+ - `endpoint`: Set the endpoint for backend.
22
+ - `region`: Set the region for backend.
23
+ - `access_key_id`: Set the access_key_id for backend.
24
+ - `secret_access_key`: Set the secret_access_key for backend.
25
+ - `session_token`: Set the session_token for backend.
26
+ - `default_storage_class`: Set the default storage_class for backend.
27
+ - `server_side_encryption`: Set the server_side_encryption for backend.
28
+ - `server_side_encryption_aws_kms_key_id`: Set the server_side_encryption_aws_kms_key_id for backend.
29
+ - `server_side_encryption_customer_algorithm`: Set the server_side_encryption_customer_algorithm for backend.
30
+ - `server_side_encryption_customer_key`: Set the server_side_encryption_customer_key for backend.
31
+ - `server_side_encryption_customer_key_md5`: Set the server_side_encryption_customer_key_md5 for backend.
32
+ - `disable_config_load`: Disable aws config load from env.
33
+ - `enable_virtual_host_style`: Enable virtual host style.
34
+ - `disable_write_with_if_match`: Disable write with if match.
35
+ - `enable_request_payer`: Enable the request payer for backend.
36
+
37
+ Refer to [`S3Builder`]'s public API docs for more information.
38
+
39
+ ## Temporary security credentials
40
+
41
+ OpenDAL now provides support for S3 temporary security credentials in IAM.
42
+
43
+ The way to take advantage of this feature is to build your S3 backend with `Builder::session_token`.
44
+
45
+ But OpenDAL will not refresh the temporary security credentials, please keep in mind to refresh those credentials in time.
46
+
47
+ ## Server Side Encryption
48
+
49
+ OpenDAL provides full support of S3 Server Side Encryption(SSE) features.
50
+
51
+ The easiest way to configure them is to use helper functions like
52
+
53
+ - SSE-KMS: `server_side_encryption_with_aws_managed_kms_key`
54
+ - SSE-KMS: `server_side_encryption_with_customer_managed_kms_key`
55
+ - SSE-S3: `server_side_encryption_with_s3_key`
56
+ - SSE-C: `server_side_encryption_with_customer_key`
57
+
58
+ If those functions don't fulfill need, low-level options are also provided:
59
+
60
+ - Use service managed kms key
61
+ - `server_side_encryption="aws:kms"`
62
+ - Use customer provided kms key
63
+ - `server_side_encryption="aws:kms"`
64
+ - `server_side_encryption_aws_kms_key_id="your-kms-key"`
65
+ - Use S3 managed key
66
+ - `server_side_encryption="AES256"`
67
+ - Use customer key
68
+ - `server_side_encryption_customer_algorithm="AES256"`
69
+ - `server_side_encryption_customer_key="base64-of-your-aes256-key"`
70
+ - `server_side_encryption_customer_key_md5="base64-of-your-aes256-key-md5"`
71
+
72
+ After SSE have been configured, all requests send by this backed will attach those headers.
73
+
74
+ Reference: [Protecting data using server-side encryption](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)
75
+
76
+ ## Example
77
+
78
+ ## Via Builder
79
+
80
+ ### Basic Setup
81
+
82
+ ```rust,no_run
83
+ use std::sync::Arc;
84
+
85
+ use anyhow::Result;
86
+ use opendal::services::S3;
87
+ use opendal::Operator;
88
+
89
+ #[tokio::main]
90
+ async fn main() -> Result<()> {
91
+ // Create s3 backend builder.
92
+ let mut builder = S3::default()
93
+ // Set the root for s3, all operations will happen under this root.
94
+ //
95
+ // NOTE: the root must be absolute path.
96
+ .root("/path/to/dir")
97
+ // Set the bucket name. This is required.
98
+ .bucket("test")
99
+ // Set the region. This is required for some services, if you don't care about it, for example Minio service, just set it to "auto", it will be ignored.
100
+ .region("us-east-1")
101
+ // Set the endpoint.
102
+ //
103
+ // For examples:
104
+ // - "https://s3.amazonaws.com"
105
+ // - "http://127.0.0.1:9000"
106
+ // - "https://oss-ap-northeast-1.aliyuncs.com"
107
+ // - "https://cos.ap-seoul.myqcloud.com"
108
+ //
109
+ // Default to "https://s3.amazonaws.com"
110
+ .endpoint("https://s3.amazonaws.com")
111
+ // Set the access_key_id and secret_access_key.
112
+ //
113
+ // OpenDAL will try load credential from the env.
114
+ // If credential not set and no valid credential in env, OpenDAL will
115
+ // send request without signing like anonymous user.
116
+ .access_key_id("access_key_id")
117
+ .secret_access_key("secret_access_key");
118
+
119
+ let op: Operator = Operator::new(builder)?.finish();
120
+
121
+ Ok(())
122
+ }
123
+
124
+ ```
125
+
126
+ ### S3 with SSE-C
127
+
128
+ ```rust,no_run
129
+ use anyhow::Result;
130
+ use log::info;
131
+ use opendal::services::S3;
132
+ use opendal::Operator;
133
+
134
+ #[tokio::main]
135
+ async fn main() -> Result<()> {
136
+ let mut builder = S3::default()
137
+ .root("/path/to/dir")
138
+ .bucket("test")
139
+ .region("us-east-1")
140
+ .endpoint("https://s3.amazonaws.com")
141
+ .access_key_id("access_key_id")
142
+ .secret_access_key("secret_access_key")
143
+ // Enable SSE-C
144
+ .server_side_encryption_with_customer_key("AES256", "customer_key".as_bytes());
145
+
146
+ let op = Operator::new(builder)?.finish();
147
+ info!("operator: {:?}", op);
148
+
149
+ // Writing your testing code here.
150
+
151
+ Ok(())
152
+ }
153
+ ```
154
+
155
+ ### S3 with SSE-KMS and aws managed kms key
156
+
157
+ ```rust,no_run
158
+ use anyhow::Result;
159
+ use log::info;
160
+ use opendal::services::S3;
161
+ use opendal::Operator;
162
+
163
+ #[tokio::main]
164
+ async fn main() -> Result<()> {
165
+ let mut builder = S3::default()
166
+ // Setup builders
167
+ .root("/path/to/dir")
168
+ .bucket("test")
169
+ .region("us-east-1")
170
+ .endpoint("https://s3.amazonaws.com")
171
+ .access_key_id("access_key_id")
172
+ .secret_access_key("secret_access_key")
173
+ // Enable SSE-KMS with aws managed kms key
174
+ .server_side_encryption_with_aws_managed_kms_key();
175
+
176
+ let op = Operator::new(builder)?.finish();
177
+ info!("operator: {:?}", op);
178
+
179
+ // Writing your testing code here.
180
+
181
+ Ok(())
182
+ }
183
+ ```
184
+
185
+ ### S3 with SSE-KMS and customer managed kms key
186
+
187
+ ```rust,no_run
188
+ use anyhow::Result;
189
+ use log::info;
190
+ use opendal::services::S3;
191
+ use opendal::Operator;
192
+
193
+ #[tokio::main]
194
+ async fn main() -> Result<()> {
195
+ let mut builder = S3::default()
196
+ // Setup builders
197
+ .root("/path/to/dir")
198
+ .bucket("test")
199
+ .region("us-east-1")
200
+ .endpoint("https://s3.amazonaws.com")
201
+ .access_key_id("access_key_id")
202
+ .secret_access_key("secret_access_key")
203
+ // Enable SSE-KMS with customer managed kms key
204
+ .server_side_encryption_with_customer_managed_kms_key("aws_kms_key_id");
205
+
206
+ let op = Operator::new(builder)?.finish();
207
+ info!("operator: {:?}", op);
208
+
209
+ // Writing your testing code here.
210
+
211
+ Ok(())
212
+ }
213
+ ```
214
+
215
+ ### S3 with SSE-S3
216
+
217
+ ```rust,no_run
218
+ use anyhow::Result;
219
+ use log::info;
220
+ use opendal::services::S3;
221
+ use opendal::Operator;
222
+
223
+ #[tokio::main]
224
+ async fn main() -> Result<()> {
225
+ let mut builder = S3::default()
226
+ // Setup builders
227
+ .root("/path/to/dir")
228
+ .bucket("test")
229
+ .region("us-east-1")
230
+ .endpoint("https://s3.amazonaws.com")
231
+ .access_key_id("access_key_id")
232
+ .secret_access_key("secret_access_key")
233
+ // Enable SSE-S3
234
+ .server_side_encryption_with_s3_key();
235
+
236
+ let op = Operator::new(builder)?.finish();
237
+ info!("operator: {:?}", op);
238
+
239
+ // Writing your testing code here.
240
+
241
+ Ok(())
242
+ }
243
+ ```
244
+
@@ -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
+ - [ ] copy
11
+ - [ ] rename
12
+ - [x] list
13
+ - [ ] presign
14
+ - [ ] blocking
15
+
16
+ ## Configuration
17
+
18
+ - `root`: Set the work directory for backend
19
+ - `endpoint`: Seafile endpoint address
20
+ - `username` Seafile username
21
+ - `password` Seafile password
22
+ - `repo_name` Seafile repo name
23
+
24
+ You can refer to [`SeafileBuilder`]'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::Seafile;
33
+ use opendal::Operator;
34
+
35
+ #[tokio::main]
36
+ async fn main() -> Result<()> {
37
+ // create backend builder
38
+ let mut builder = Seafile::default()
39
+ // set the storage bucket for OpenDAL
40
+ .root("/")
41
+ // set the endpoint for OpenDAL
42
+ .endpoint("http://127.0.0.1:80")
43
+ // set the username for OpenDAL
44
+ .username("xxxxxxxxxx")
45
+ // set the password name for OpenDAL
46
+ .password("opendal")
47
+ // set the repo_name for OpenDAL
48
+ .repo_name("xxxxxxxxxxxxx");
49
+
50
+ let op: Operator = Operator::new(builder)?.finish();
51
+
52
+ Ok(())
53
+ }
54
+ ```
@@ -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] append
9
+ - [x] create_dir
10
+ - [x] delete
11
+ - [x] copy
12
+ - [x] rename
13
+ - [x] list
14
+ - [ ] ~~presign~~
15
+ - [ ] blocking
16
+
17
+ ## Configuration
18
+
19
+ - `endpoint`: Set the endpoint for connection. The format is same as `openssh`, using either `[user@]hostname` or `ssh://[user@]hostname[:port]`. A username or port that is specified in the endpoint overrides the one set in the builder (but does not change the builder).
20
+ - `root`: Set the work directory for backend. It uses the default directory set by the remote `sftp-server` as default
21
+ - `user`: Set the login user
22
+ - `key`: Set the public key for login
23
+ - `known_hosts_strategy`: Set the strategy for known hosts, default to `Strict`
24
+ - `enable_copy`: Set whether the remote server has copy-file extension
25
+
26
+ For security reasons, it doesn't support password login, you can use public key or ssh-copy-id instead.
27
+
28
+ You can refer to [`SftpBuilder`]'s docs for more information
29
+
30
+ ## Example
31
+
32
+ ### Via Builder
33
+
34
+ ```rust,no_run
35
+ use anyhow::Result;
36
+ use opendal::services::Sftp;
37
+ use opendal::Operator;
38
+
39
+ #[tokio::main]
40
+ async fn main() -> Result<()> {
41
+ let mut builder = Sftp::default()
42
+ .endpoint("127.0.0.1")
43
+ .user("test")
44
+ .key("test_key");
45
+
46
+ let op: Operator = Operator::new(builder)?.finish();
47
+ Ok(())
48
+ }
49
+ ```
@@ -0,0 +1,39 @@
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
+ - [x] blocking
15
+
16
+ ## Configuration
17
+
18
+ - `datadir`: Set the path to the sled data directory
19
+
20
+ You can refer to [`SledBuilder`]'s docs for more information
21
+
22
+ ## Example
23
+
24
+ ### Via Builder
25
+
26
+ ```rust,no_run
27
+ use anyhow::Result;
28
+ use opendal::services::Sled;
29
+ use opendal::Operator;
30
+
31
+ #[tokio::main]
32
+ async fn main() -> Result<()> {
33
+ let mut builder = Sled::default()
34
+ .datadir("/tmp/opendal/sled");
35
+
36
+ let op: Operator = Operator::new(builder)?.finish();
37
+ Ok(())
38
+ }
39
+ ```
@@ -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] create_dir
9
+ - [x] delete
10
+ - [ ] copy
11
+ - [ ] rename
12
+ - [x] list
13
+ - [ ] blocking
14
+
15
+ ## Configuration
16
+
17
+ - `root`: Set the working directory of `OpenDAL`
18
+ - `connection_string`: Set the connection string of sqlite database
19
+ - `table`: Set the table of sqlite
20
+ - `key_field`: Set the key field of sqlite
21
+ - `value_field`: Set the value field of sqlite
22
+
23
+ ## Example
24
+
25
+ ### Via Builder
26
+
27
+ ```rust,no_run
28
+ use anyhow::Result;
29
+ use opendal::services::Sqlite;
30
+ use opendal::Operator;
31
+
32
+ #[tokio::main]
33
+ async fn main() -> Result<()> {
34
+ let mut builder = Sqlite::default()
35
+ .root("/")
36
+ .connection_string("file//abc.db")
37
+ .table("your_table")
38
+ // key field type in the table should be compatible with Rust's &str like text
39
+ .key_field("key")
40
+ // value field type in the table should be compatible with Rust's Vec<u8> like bytea
41
+ .value_field("value");
42
+
43
+ let op = Operator::new(builder)?.finish();
44
+ Ok(())
45
+ }
46
+ ```
@@ -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
+ - [ ] 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 surrealdb server
20
+ - `username`: set the username of surrealdb
21
+ - `password`: set the password of surrealdb
22
+ - `namespace`: set the namespace of surrealdb
23
+ - `database`: set the database of surrealdb
24
+ - `table`: Set the table of surrealdb
25
+ - `key_field`: Set the key field of surrealdb
26
+ - `value_field`: Set the value field of surrealdb
27
+ -
28
+
29
+ ## Example
30
+
31
+ ### Via Builder
32
+
33
+ ```rust
34
+ use anyhow::Result;
35
+ use opendal::services::Surrealdb;
36
+ use opendal::Operator;
37
+
38
+ #[tokio::main]
39
+ async fn main() -> Result<()> {
40
+ let mut builder = Surrealdb::default()
41
+ .root("/")
42
+ .connection_string("ws://127.0.0.1:8000")
43
+ .username("username")
44
+ .password("password")
45
+ .namespace("namespace")
46
+ .database("database")
47
+ .table("table")
48
+ .key_field("key")
49
+ .value_field("value");
50
+
51
+ let op = Operator::new(builder)?.finish();
52
+ Ok(())
53
+ }
54
+ ```
@@ -0,0 +1,53 @@
1
+ ## Compatible Services
2
+
3
+ ### OpenStack Swift
4
+
5
+ [OpenStack Swift](https://docs.openstack.org/swift/latest/) is the default implementations of swift services.
6
+
7
+ To connect to OpenStack Swift, we need to set:
8
+
9
+ - `endpoint`: The endpoint of OpenStack Swift, for example: `http://127.0.0.1:8080/v1/AUTH_test`.
10
+ - `container`: The name of OpenStack Swift container.
11
+ - `token`: OpenStack Swift container personal access token.
12
+
13
+ ```rust,ignore
14
+ builder.endpoint("http://127.0.0.1:8080/v1/AUTH_test");
15
+ builder.container("container");
16
+ builder.token("token");
17
+ ```
18
+
19
+ `endpoint` is the full URL that serves as the access point to all containers under an OpenStack Swift account. It represents the entry point for accessing the resources of the account. Alongside `endpoint`, `token` is used as a credential to verify the user's identity and authorize access to the relevant resources. Both `endpoint` and `token` can be obtained through OpenStack Swift authentication service.
20
+
21
+ `endpoint` consists of server address and port, API version, authenticated account ID. For instance, it might appear as follows:
22
+
23
+ - `http://127.0.0.1:8080/v1/AUTH_test`.
24
+ - `http://192.168.66.88:8080/swift/v1`.
25
+ - `https://openstack-controller.example.com:8080/v1/account`.
26
+
27
+ Please note that the exact format of `endpoint` may vary depending on the deployment configuration and version of swift services. Users can refer to the specific services documentation for the correct `endpoint` format and authentication method.
28
+
29
+ For more information, refer:
30
+
31
+ - [OpenStack Swift API](https://docs.openstack.org/api-ref/object-store/).
32
+ - [OpenStack Swift Authentication](https://docs.openstack.org/swift/latest/api/object_api_v1_overview.html).
33
+
34
+ ### Ceph Rados Gateway
35
+
36
+ [Ceph Rados Gateway](https://docs.ceph.com/en/quincy/radosgw/) supports a RESTful API that is compatible with the basic data access model of OpenStack Swift API.
37
+
38
+ To connect to Ceph Rados Gateway, we need to set:
39
+
40
+ - `endpoint`: The endpoint of swift services, for example: `http://127.0.0.1:8080/swift/v1`.
41
+ - `container`: The name of swift container.
42
+ - `token`: swift container personal access token.
43
+
44
+ ```rust,ignore
45
+ builder.endpoint("http://127.0.0.1:8080/swift/v1");
46
+ builder.container("container");
47
+ builder.token("token");
48
+ ```
49
+
50
+ For more information, refer:
51
+
52
+ - [Ceph Rados Gateway Swift API](https://docs.ceph.com/en/latest/radosgw/swift/#api).
53
+ - [Ceph Rados Gateway Swift Authentication](https://docs.ceph.com/en/latest/radosgw/swift/auth/).
@@ -0,0 +1,52 @@
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
+ - [ ] ~~presign~~
14
+ - [ ] blocking
15
+
16
+ ## Configurations
17
+
18
+ - `endpoint`: Set the endpoint for backend.
19
+ - `container`: Swift container.
20
+ - `token`: Swift personal access token.
21
+
22
+ Refer to [`SwiftBuilder`]'s public API docs for more information.
23
+
24
+ ## Examples
25
+
26
+ ### Via Builder
27
+
28
+ ```rust,no_run
29
+ use std::sync::Arc;
30
+
31
+ use anyhow::Result;
32
+ use opendal::services::Swift;
33
+ use opendal::Operator;
34
+
35
+ #[tokio::main]
36
+ async fn main() -> Result<()> {
37
+ // Create Swift backend builder
38
+ let mut builder = Swift::default()
39
+ // Set the root for swift, all operations will happen under this root
40
+ .root("/path/to/dir")
41
+ // set the endpoint of Swift backend
42
+ .endpoint("https://openstack-controller.example.com:8080/v1/account")
43
+ // set the container name of Swift workspace
44
+ .container("container")
45
+ // set the auth token for builder
46
+ .token("token");
47
+
48
+ let op: Operator = Operator::new(builder)?.finish();
49
+
50
+ Ok(())
51
+ }
52
+ ```
@@ -0,0 +1,43 @@
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
+ ## Configuration
17
+
18
+ - `endpoints`: Set the endpoints to the tikv cluster
19
+ - `insecure`: Set the insecure flag to the tikv cluster
20
+ - `ca_path`: Set the ca path to the tikv connection
21
+ - `cert_path`: Set the cert path to the tikv connection
22
+ - `key_path`: Set the key path to the tikv connection
23
+
24
+ You can refer to [`TikvBuilder`]'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::Tikv;
33
+ use opendal::Operator;
34
+
35
+ #[tokio::main]
36
+ async fn main() -> Result<()> {
37
+ let mut builder = Tikv::default()
38
+ .endpoints(vec!["127.0.0.1:2379".to_string()]);
39
+
40
+ let op: Operator = Operator::new(builder)?.finish();
41
+ Ok(())
42
+ }
43
+ ```
@@ -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
+ - `bucket`: Upyun bucket name
20
+ - `operator` Upyun operator
21
+ - `password` Upyun password
22
+
23
+ You can refer to [`UpyunBuilder`]'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::Upyun;
32
+ use opendal::Operator;
33
+
34
+ #[tokio::main]
35
+ async fn main() -> Result<()> {
36
+ // create backend builder
37
+ let mut builder = Upyun::default()
38
+ // set the storage bucket for OpenDAL
39
+ .root("/")
40
+ // set the bucket for OpenDAL
41
+ .bucket("test")
42
+ // set the operator for OpenDAL
43
+ .operator("xxxxxxxxxx")
44
+ // set the password name for OpenDAL
45
+ .password("opendal");
46
+
47
+ let op: Operator = Operator::new(builder)?.finish();
48
+
49
+ Ok(())
50
+ }
51
+ ```