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
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//! object_store_opendal is an object store implementation using opendal.
//!
//! This crate can help you to access 30 more storage services with the same object_store API.
//!
//! ```no_run
//! use std::sync::Arc;
//!
//! use bytes::Bytes;
//! use object_store::path::Path;
//! use object_store::ObjectStore;
//! use object_store_opendal::OpendalStore;
//! use opendal::services::S3;
//! use opendal::{Builder, Operator};
//!
//! #[tokio::main]
//! async fn main() {
//! let builder = S3::from_map(
//! vec![
//! ("access_key".to_string(), "my_access_key".to_string()),
//! ("secret_key".to_string(), "my_secret_key".to_string()),
//! ("endpoint".to_string(), "my_endpoint".to_string()),
//! ("region".to_string(), "my_region".to_string()),
//! ]
//! .into_iter()
//! .collect(),
//! );
//!
//! // Create a new operator
//! let operator = Operator::new(builder).unwrap().finish();
//!
//! // Create a new object store
//! let object_store = Arc::new(OpendalStore::new(operator));
//!
//! let path = Path::from("data/nested/test.txt");
//! let bytes = Bytes::from_static(b"hello, world! I am nested.");
//!
//! object_store.put(&path, bytes.clone().into()).await.unwrap();
//!
//! let content = object_store
//! .get(&path)
//! .await
//! .unwrap()
//! .bytes()
//! .await
//! .unwrap();
//!
//! assert_eq!(content, bytes);
//! }
//! ```
mod store;
pub use store::OpendalStore;
mod utils;
// Make sure `send_wrapper` works as expected
#[cfg(all(feature = "send_wrapper", target_arch = "wasm32"))]
mod assert_send {
use object_store::ObjectStore;
#[allow(dead_code)]
fn assert_send<T: Send>(_: T) {}
#[allow(dead_code)]
fn assertion() {
let op = super::Operator::new(opendal::services::Memory::default())
.unwrap()
.finish();
let store = super::OpendalStore::new(op);
assert_send(store.put(&"test".into(), bytes::Bytes::new()));
assert_send(store.get(&"test".into()));
assert_send(store.get_range(&"test".into(), 0..1));
assert_send(store.head(&"test".into()));
assert_send(store.delete(&"test".into()));
assert_send(store.list(None));
assert_send(store.list_with_offset(None, &"test".into()));
assert_send(store.list_with_delimiter(None));
}
}