Struct opendal::BlockingOperator
source · pub struct BlockingOperator { /* private fields */ }
Expand description
BlockingOperator is the entry for all public blocking APIs.
Read concepts
for know more about Operator
.
Examples
Read more backend init examples in services
use opendal::services::Fs;
use opendal::BlockingOperator;
use opendal::Operator;
#[tokio::main]
async fn main() -> Result<()> {
// Create fs backend builder.
let mut builder = Fs::default();
// Set the root for fs, all operations will happen under this root.
//
// NOTE: the root must be absolute path.
builder.root("/tmp");
// Build an `BlockingOperator` to start operating the storage.
let _: BlockingOperator = Operator::new(builder)?.finish().blocking();
Ok(())
}
Implementations§
source§impl BlockingOperator
impl BlockingOperator
sourcepub fn with_limit(&self, limit: usize) -> Self
pub fn with_limit(&self, limit: usize) -> Self
Specify the batch limit.
Default: 1000
sourcepub fn info(&self) -> OperatorInfo
pub fn info(&self) -> OperatorInfo
Get information of underlying accessor.
Examples
use opendal::BlockingOperator;
let info = op.info();
source§impl BlockingOperator
impl BlockingOperator
sourcepub fn stat(&self, path: &str) -> Result<Metadata>
pub fn stat(&self, path: &str) -> Result<Metadata>
Get current path’s metadata without cache directly.
Notes
Use stat
if you:
- Want detect the outside changes of path.
- Don’t want to read from cached metadata.
You may want to use metadata
if you are working with entries
returned by Lister
. It’s highly possible that metadata
you want has already been cached.
Examples
use opendal::ErrorKind;
if let Err(e) = op.stat("test") {
if e.kind() == ErrorKind::NotFound {
println!("file not exist")
}
}
sourcepub fn metadata(
&self,
entry: &Entry,
flags: impl Into<FlagSet<Metakey>>
) -> Result<Metadata>
pub fn metadata( &self, entry: &Entry, flags: impl Into<FlagSet<Metakey>> ) -> Result<Metadata>
Get current metadata with cache in blocking way.
metadata
will check the given query with already cached metadata
first. And query from storage if not found.
Notes
Use metadata
if you are working with entries returned by
Lister
. It’s highly possible that metadata you want
has already been cached.
You may want to use stat
, if you:
- Want detect the outside changes of file.
- Don’t want to read from cached file metadata.
Behavior
Visiting not fetched metadata will lead to panic in debug build. It must be a bug, please fix it instead.
Examples
Query already cached metadata
By query metadata with None
, we can only query in-memory metadata
cache. In this way, we can make sure that no API call will send.
use opendal::Entry;
let meta = op.metadata(&entry, None)?;
// content length COULD be correct.
let _ = meta.content_length();
// etag COULD be correct.
let _ = meta.etag();
Query content length and content type
use opendal::Entry;
use opendal::Metakey;
let meta = op.metadata(&entry, { Metakey::ContentLength | Metakey::ContentType })?;
// content length MUST be correct.
let _ = meta.content_length();
// etag COULD be correct.
let _ = meta.etag();
Query all metadata
By query metadata with Complete
, we can make sure that we have fetched all metadata of this entry.
use opendal::Entry;
use opendal::Metakey;
let meta = op.metadata(&entry, { Metakey::Complete })?;
// content length MUST be correct.
let _ = meta.content_length();
// etag MUST be correct.
let _ = meta.etag();
sourcepub fn is_exist(&self, path: &str) -> Result<bool>
pub fn is_exist(&self, path: &str) -> Result<bool>
Check if this path exists or not.
Example
use anyhow::Result;
use opendal::BlockingOperator;
fn test(op: BlockingOperator) -> Result<()> {
let _ = op.is_exist("test")?;
Ok(())
}
sourcepub fn create_dir(&self, path: &str) -> Result<()>
pub fn create_dir(&self, path: &str) -> Result<()>
Create a dir at given path.
Notes
To indicate that a path is a directory, it is compulsory to include
a trailing / in the path. Failure to do so may result in
NotADirectory
error being returned by OpenDAL.
Behavior
- Create on existing dir will succeed.
- Create dir is always recursive, works like
mkdir -p
Examples
op.create_dir("path/to/dir/")?;
sourcepub fn read(&self, path: &str) -> Result<Vec<u8>>
pub fn read(&self, path: &str) -> Result<Vec<u8>>
Read the whole path into a bytes.
This function will allocate a new bytes internally. For more precise memory control or
reading data lazily, please use BlockingOperator::reader
Examples
let bs = op.read("path/to/file")?;
sourcepub fn range_read(
&self,
path: &str,
range: impl RangeBounds<u64>
) -> Result<Vec<u8>>
pub fn range_read( &self, path: &str, range: impl RangeBounds<u64> ) -> Result<Vec<u8>>
Read the specified range of path into a bytes.
This function will allocate a new bytes internally. For more precise memory control or
reading data lazily, please use BlockingOperator::range_reader
Examples
let bs = op.range_read("path/to/file", 1024..2048)?;
sourcepub fn reader(&self, path: &str) -> Result<BlockingReader>
pub fn reader(&self, path: &str) -> Result<BlockingReader>
sourcepub fn range_reader(
&self,
path: &str,
range: impl RangeBounds<u64>
) -> Result<BlockingReader>
pub fn range_reader( &self, path: &str, range: impl RangeBounds<u64> ) -> Result<BlockingReader>
Create a new reader which can read the specified range.
Examples
let r = op.range_reader("path/to/file", 1024..2048)?;
sourcepub fn write_with(&self, path: &str, bs: impl Into<Bytes>) -> FunctionWrite
pub fn write_with(&self, path: &str, bs: impl Into<Bytes>) -> FunctionWrite
sourcepub fn writer(&self, path: &str) -> Result<BlockingWriter>
pub fn writer(&self, path: &str) -> Result<BlockingWriter>
sourcepub fn delete_with(&self, path: &str) -> FunctionDelete
pub fn delete_with(&self, path: &str) -> FunctionDelete
sourcepub fn remove_all(&self, path: &str) -> Result<()>
pub fn remove_all(&self, path: &str) -> Result<()>
sourcepub fn list(&self, path: &str) -> Result<BlockingLister>
pub fn list(&self, path: &str) -> Result<BlockingLister>
List current dir path.
This function will create a new handle to list entries.
An error will be returned if path doesn’t end with /
.
Examples
let mut ds = op.list("path/to/dir/")?;
while let Some(mut de) = ds.next() {
let meta = op.metadata(&de?, {
use opendal::Metakey::*;
Mode
})?;
match meta.mode() {
EntryMode::FILE => {
println!("Handling file")
}
EntryMode::DIR => {
println!("Handling dir like start a new list via de.path()")
}
EntryMode::Unknown => continue,
}
}
sourcepub fn scan(&self, path: &str) -> Result<BlockingLister>
pub fn scan(&self, path: &str) -> Result<BlockingLister>
List dir in flat way.
Also, this function can be used to list a prefix.
An error will be returned if given path doesn’t end with /
.
Notes
scan
will not return the prefix itself.scan
is an alias oflist_with(OpList::new().with_delimiter(""))
Examples
let mut ds = op.list("path/to/dir/")?;
while let Some(mut de) = ds.next() {
let meta = op.metadata(&de?, {
use opendal::Metakey::*;
Mode
})?;
match meta.mode() {
EntryMode::FILE => {
println!("Handling file")
}
EntryMode::DIR => {
println!("Handling dir like start a new list via meta.path()")
}
EntryMode::Unknown => continue,
}
}
Trait Implementations§
source§impl Clone for BlockingOperator
impl Clone for BlockingOperator
source§fn clone(&self) -> BlockingOperator
fn clone(&self) -> BlockingOperator
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more