ayun-opendal 0.24.0

The RUST Framework for Web Rustceans.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
use crate::{config, config::Layer, Opendal, OpendalResult};
use opendal::{Configurator, Operator};

impl Opendal {
    #[allow(unused_variables)]
    pub fn try_from_config(config: config::Opendal) -> OpendalResult<Self> {
        #[allow(unused_mut)]
        let mut opendal = Self::default();

        #[cfg(feature = "services-aliyun-drive")]
        {
            opendal = opendal.register(config.services.aliyun_drive, &config.layers)?;
        }

        #[cfg(feature = "services-atomicserver")]
        {
            opendal = opendal.register(config.services.atomicserver, &config.layers)?;
        }

        #[cfg(feature = "services-azblob")]
        {
            opendal = opendal.register(config.services.azblob, &config.layers)?;
        }

        #[cfg(feature = "services-azdls")]
        {
            opendal = opendal.register(config.services.azdls, &config.layers)?;
        }

        #[cfg(feature = "services-b2")]
        {
            opendal = opendal.register(config.services.b2, &config.layers)?;
        }

        #[cfg(feature = "services-chainsafe")]
        {
            opendal = opendal.register(config.services.chainsafe, &config.layers)?;
        }

        #[cfg(feature = "services-cacache")]
        {
            opendal = opendal.register(config.services.cacache, &config.layers)?;
        }

        #[cfg(feature = "services-compfs")]
        {
            opendal = opendal.register(config.services.compfs, &config.layers)?;
        }

        #[cfg(feature = "services-cloudflare-kv")]
        {
            opendal = opendal.register(config.services.cloudflare_kv, &config.layers)?;
        }

        #[cfg(feature = "services-cos")]
        {
            opendal = opendal.register(config.services.cos, &config.layers)?;
        }

        #[cfg(feature = "services-d1")]
        {
            opendal = opendal.register(config.services.d1, &config.layers)?;
        }

        #[cfg(feature = "services-dashmap")]
        {
            opendal = opendal.register(config.services.dashmap, &config.layers)?;
        }

        #[cfg(feature = "services-dbfs")]
        {
            opendal = opendal.register(config.services.dbfs, &config.layers)?;
        }

        #[cfg(feature = "services-dropbox")]
        {
            opendal = opendal.register(config.services.dropbox, &config.layers)?;
        }

        #[cfg(feature = "services-etcd")]
        {
            opendal = opendal.register(config.services.etcd, &config.layers)?;
        }

        #[cfg(feature = "services-fs")]
        {
            opendal = opendal.register(config.services.fs, &config.layers)?;
        }

        #[cfg(feature = "services-gcs")]
        {
            opendal = opendal.register(config.services.gcs, &config.layers)?;
        }

        #[cfg(feature = "services-gdrive")]
        {
            opendal = opendal.register(config.services.gdrive, &config.layers)?;
        }

        #[cfg(feature = "services-ghac")]
        {
            opendal = opendal.register(config.services.ghac, &config.layers)?;
        }

        #[cfg(feature = "services-gridfs")]
        {
            opendal = opendal.register(config.services.gridfs, &config.layers)?;
        }

        #[cfg(feature = "services-github")]
        {
            opendal = opendal.register(config.services.github, &config.layers)?;
        }

        #[cfg(feature = "services-http")]
        {
            opendal = opendal.register(config.services.http, &config.layers)?;
        }

        #[cfg(feature = "services-huggingface")]
        {
            opendal = opendal.register(config.services.huggingface, &config.layers)?;
        }

        // #[cfg(feature = "services-ftp")]
        // {
        //     opendal = opendal.register(config.services.ftp, &config.layers)?;
        // }

        #[cfg(feature = "services-ipfs")]
        {
            opendal = opendal.register(config.services.ipfs, &config.layers)?;
        }

        #[cfg(feature = "services-ipmfs")]
        {
            opendal = opendal.register(config.services.ipmfs, &config.layers)?;
        }

        #[cfg(feature = "services-icloud")]
        {
            opendal = opendal.register(config.services.icloud, &config.layers)?;
        }

        #[cfg(feature = "services-koofr")]
        {
            opendal = opendal.register(config.services.koofr, &config.layers)?;
        }

        #[cfg(feature = "services-libsql")]
        {
            opendal = opendal.register(config.services.libsql, &config.layers)?;
        }

        #[cfg(feature = "services-memcached")]
        {
            opendal = opendal.register(config.services.memcached, &config.layers)?;
        }

        #[cfg(feature = "services-memory")]
        {
            opendal = opendal.register(config.services.memory, &config.layers)?;
        }

        #[cfg(feature = "services-mysql")]
        {
            opendal = opendal.register(config.services.mysql, &config.layers)?;
        }

        #[cfg(feature = "services-sqlite")]
        {
            opendal = opendal.register(config.services.sqlite, &config.layers)?;
        }

        #[cfg(feature = "services-mini-moka")]
        {
            opendal = opendal.register(config.services.mini_moka, &config.layers)?;
        }

        #[cfg(feature = "services-moka")]
        {
            opendal = opendal.register(config.services.moka, &config.layers)?;
        }

        #[cfg(feature = "services-monoiofs")]
        {
            opendal = opendal.register(config.services.monoiofs, &config.layers)?;
        }

        #[cfg(feature = "services-obs")]
        {
            opendal = opendal.register(config.services.obs, &config.layers)?;
        }

        #[cfg(feature = "services-onedrive")]
        {
            opendal = opendal.register(config.services.onedrive, &config.layers)?;
        }

        #[cfg(feature = "services-persy")]
        {
            opendal = opendal.register(config.services.persy, &config.layers)?;
        }

        #[cfg(feature = "services-postgresql")]
        {
            opendal = opendal.register(config.services.postgresql, &config.layers)?;
        }

        #[cfg(feature = "services-redb")]
        {
            opendal = opendal.register(config.services.redb, &config.layers)?;
        }

        #[cfg(feature = "services-redis")]
        {
            opendal = opendal.register(config.services.redis, &config.layers)?;
        }

        // #[cfg(feature = "services-rocksdb")]
        // {
        //     opendal = opendal.register("rocksdb", config.services.rocksdb)?;
        // }

        #[cfg(feature = "services-s3")]
        {
            opendal = opendal.register(config.services.s3, &config.layers)?;
        }

        #[cfg(feature = "services-seafile")]
        {
            opendal = opendal.register(config.services.seafile, &config.layers)?;
        }

        #[cfg(feature = "services-upyun")]
        {
            opendal = opendal.register(config.services.upyun, &config.layers)?;
        }

        #[cfg(feature = "services-yandex-disk")]
        {
            opendal = opendal.register(config.services.yandex_disk, &config.layers)?;
        }

        #[cfg(feature = "services-sftp")]
        {
            opendal = opendal.register(config.services.sftp, &config.layers)?;
        }

        #[cfg(feature = "services-sled")]
        {
            opendal = opendal.register(config.services.sled, &config.layers)?;
        }

        #[cfg(feature = "services-supabase")]
        {
            opendal = opendal.register(config.services.supabase, &config.layers)?;
        }

        #[cfg(feature = "services-swift")]
        {
            opendal = opendal.register(config.services.swift, &config.layers)?;
        }

        #[cfg(feature = "services-oss")]
        {
            opendal = opendal.register(config.services.oss, &config.layers)?;
        }

        #[cfg(feature = "services-vercel-artifacts")]
        {
            opendal = opendal.register(config.services.vercel_artifacts, &config.layers)?;
        }

        #[cfg(feature = "services-vercel-blob")]
        {
            opendal = opendal.register(config.services.vercel_blob, &config.layers)?;
        }

        #[cfg(feature = "services-webdav")]
        {
            opendal = opendal.register(config.services.webdav, &config.layers)?;
        }

        #[cfg(feature = "services-webhdfs")]
        {
            opendal = opendal.register(config.services.webhdfs, &config.layers)?;
        }

        #[cfg(feature = "services-tikv")]
        {
            opendal = opendal.register(config.services.tikv, &config.layers)?;
        }

        #[cfg(feature = "services-azfile")]
        {
            opendal = opendal.register(config.services.azfile, &config.layers)?;
        }

        #[cfg(feature = "services-mongodb")]
        {
            opendal = opendal.register(config.services.mongodb, &config.layers)?;
        }

        #[cfg(feature = "services-surrealdb")]
        {
            opendal = opendal.register(config.services.surrealdb, &config.layers)?;
        }

        #[cfg(feature = "services-lakefs")]
        {
            opendal = opendal.register(config.services.lakefs, &config.layers)?;
        }

        Ok(opendal)
    }

    pub fn register<C: Configurator>(mut self, cfg: C, layers: &Vec<Layer>) -> OpendalResult<Self> {
        #[allow(unused_mut)]
        let mut operator = Operator::from_config(cfg)?.finish();

        for layer in layers {
            match layer {
                #[cfg(feature = "layers-async-backtrace")]
                Layer::AsyncBacktrace => {
                    operator = operator.layer(opendal::layers::AsyncBacktraceLayer);
                }
                #[cfg(feature = "layers-await-tree")]
                Layer::AwaitTree => {
                    operator = operator.layer(opendal::layers::AwaitTreeLayer::default());
                }
                #[cfg(feature = "layers-concurrent-limit")]
                Layer::ConcurrentLimit { permits } => {
                    operator = operator.layer(opendal::layers::ConcurrentLimitLayer::new(*permits));
                }
                #[cfg(feature = "layers-chaos")]
                Layer::Chaos { error_ratio } => {
                    operator = operator.layer(opendal::layers::ChaosLayer::new(*error_ratio));
                }
                #[cfg(all(target_os = "linux", feature = "layers-dtrace"))]
                Layer::Dtrace => {
                    operator = operator.layer(opendal::layers::DtraceLayer::default());
                }
                #[cfg(feature = "layers-fastrace")]
                Layer::Fastrace => {
                    operator = operator.layer(opendal::layers::FastraceLayer);
                }
                #[cfg(feature = "layers-immutable-index")]
                Layer::ImmutableIndex => {
                    operator = operator.layer(opendal::layers::ImmutableIndexLayer::default());
                }
                #[cfg(feature = "layers-logging")]
                Layer::Logging => {
                    operator = operator.layer(opendal::layers::LoggingLayer::default());
                }
                #[cfg(feature = "layers-metrics")]
                Layer::Metrics => {
                    operator = operator.layer(opendal::layers::MetricsLayer::default());
                }
                #[cfg(feature = "layers-mime-guess")]
                Layer::MimeGuess => {
                    operator = operator.layer(opendal::layers::MimeGuessLayer::default());
                }
                #[cfg(feature = "layers-otel-trace")]
                Layer::OtelTrace => {
                    operator = operator.layer(opendal::layers::OtelTraceLayer);
                }
                #[cfg(feature = "layers-prometheus-client")]
                Layer::PrometheusClient => {
                    let mut registry = prometheus_client::registry::Registry::default();
                    operator = operator.layer(
                        opendal::layers::PrometheusClientLayer::builder().register(&mut registry),
                    );
                }
                #[cfg(feature = "layers-prometheus")]
                Layer::Prometheus => {
                    let registry = prometheus::default_registry();
                    operator = operator
                        .layer(opendal::layers::PrometheusLayer::builder().register(registry)?);
                }
                #[cfg(feature = "layers-timeout")]
                Layer::Timeout {
                    timeout,
                    io_timeout,
                } => {
                    operator = operator.layer(
                        opendal::layers::TimeoutLayer::new()
                            .with_timeout(std::time::Duration::from_millis(*timeout))
                            .with_io_timeout(std::time::Duration::from_millis(*io_timeout)),
                    );
                }
                #[cfg(feature = "layers-throttle")]
                Layer::Throttle { bandwidth, burst } => {
                    operator =
                        operator.layer(opendal::layers::ThrottleLayer::new(*bandwidth, *burst));
                }
                #[cfg(feature = "layers-retry")]
                Layer::Retry => {
                    operator = operator.layer(opendal::layers::RetryLayer::new());
                }
                #[cfg(feature = "layers-tracing")]
                Layer::Tracing => {
                    operator = operator.layer(opendal::layers::TracingLayer);
                }
                #[allow(unreachable_patterns)]
                _ => {} // todo
            }
        }

        self.services
            .insert(operator.info().scheme().to_string(), operator);

        Ok(self)
    }
    pub fn operator(&self, name: &str) -> OpendalResult<&Operator> {
        Ok(self.services.get(name).ok_or(opendal::Error::new(
            opendal::ErrorKind::Unsupported,
            format!("services-{name} is not enabled or supported"),
        ))?)
    }
}