pub trait Accessor: Send + Sync + Debug + Unpin + 'static {
type Reader: Read;
type BlockingReader: BlockingRead;
type Writer: Write;
type BlockingWriter: BlockingWrite;
type Pager: Page;
type BlockingPager: BlockingPage;
Show 17 methods
fn info(&self) -> AccessorInfo;
fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpCreate
) -> Pin<Box<dyn Future<Output = Result<RpCreate>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpRead
) -> Pin<Box<dyn Future<Output = Result<(RpRead, Self::Reader)>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn write<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpWrite
) -> Pin<Box<dyn Future<Output = Result<(RpWrite, Self::Writer)>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn stat<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpStat
) -> Pin<Box<dyn Future<Output = Result<RpStat>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpDelete
) -> Pin<Box<dyn Future<Output = Result<RpDelete>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpList
) -> Pin<Box<dyn Future<Output = Result<(RpList, Self::Pager)>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn scan<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpScan
) -> Pin<Box<dyn Future<Output = Result<(RpScan, Self::Pager)>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
{ ... }
fn presign(&self, path: &str, args: OpPresign) -> Result<RpPresign> { ... }
fn batch<'life0, 'async_trait>(
&'life0 self,
args: OpBatch
) -> Pin<Box<dyn Future<Output = Result<RpBatch>> + Send + 'async_trait>>
where
Self: 'async_trait,
'life0: 'async_trait,
{ ... }
fn blocking_create(&self, path: &str, args: OpCreate) -> Result<RpCreate> { ... }
fn blocking_read(
&self,
path: &str,
args: OpRead
) -> Result<(RpRead, Self::BlockingReader)> { ... }
fn blocking_write(
&self,
path: &str,
args: OpWrite
) -> Result<(RpWrite, Self::BlockingWriter)> { ... }
fn blocking_stat(&self, path: &str, args: OpStat) -> Result<RpStat> { ... }
fn blocking_delete(&self, path: &str, args: OpDelete) -> Result<RpDelete> { ... }
fn blocking_list(
&self,
path: &str,
args: OpList
) -> Result<(RpList, Self::BlockingPager)> { ... }
fn blocking_scan(
&self,
path: &str,
args: OpScan
) -> Result<(RpScan, Self::BlockingPager)> { ... }
}Expand description
Underlying trait of all backends for implementors.
Note
Visit internals for more tutorials.
Operations
- Path in args will all be normalized into the same style, services
should handle them based on services’ requirement.
- Path that ends with
/means it’s Dir, otherwise, it’s File. - Root dir is
/ - Path will never be empty.
- Path that ends with
- Operations without capability requirement like
metadata,createare basic operations.- All services must implement them.
- Use
unimplemented!()if not implemented or can’t implement.
- Operations with capability requirement like
presignare optional operations.- Services can implement them based on services capabilities.
- The default implementation should return
ErrorKind::Unsupported.
Required Associated Types§
sourcetype BlockingReader: BlockingRead
type BlockingReader: BlockingRead
BlockingReader is the associated reader that could return in
blocking_read operation.
sourcetype BlockingWriter: BlockingWrite
type BlockingWriter: BlockingWrite
BlockingWriter is the associated writer the could return in
blocking_write operation.
sourcetype BlockingPager: BlockingPage
type BlockingPager: BlockingPage
BlockingPager is the associated pager that could return in
blocking_list or scan operation.
Required Methods§
sourcefn info(&self) -> AccessorInfo
fn info(&self) -> AccessorInfo
Invoke the info operation to get metadata of accessor.
Notes
This function is required to be implemented.
By returning AccessorInfo, underlying services can declare some useful information about it self.
- scheme: declare the scheme of backend.
- capabilities: declare the capabilities of current backend.
- hints: declare the hints of current backend
Provided Methods§
sourcefn create<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpCreate
) -> Pin<Box<dyn Future<Output = Result<RpCreate>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpCreate
) -> Pin<Box<dyn Future<Output = Result<RpCreate>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the create operation on the specified path
Require AccessorCapability::Write
Behavior
- Input path MUST match with EntryMode, DON’T NEED to check mode.
- Create on existing dir SHOULD succeed.
- Create on existing file SHOULD overwrite and truncate.
sourcefn read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpRead
) -> Pin<Box<dyn Future<Output = Result<(RpRead, Self::Reader)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpRead
) -> Pin<Box<dyn Future<Output = Result<(RpRead, Self::Reader)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the read operation on the specified path, returns a
Reader if operate successful.
Require AccessorCapability::Read
Behavior
- Input path MUST be file path, DON’T NEED to check mode.
- The returning content length may be smaller than the range specified.
sourcefn write<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpWrite
) -> Pin<Box<dyn Future<Output = Result<(RpWrite, Self::Writer)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn write<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpWrite
) -> Pin<Box<dyn Future<Output = Result<(RpWrite, Self::Writer)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the write operation on the specified path, returns a
written size if operate successful.
Require AccessorCapability::Write
Behavior
- Input path MUST be file path, DON’T NEED to check mode.
sourcefn stat<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpStat
) -> Pin<Box<dyn Future<Output = Result<RpStat>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn stat<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpStat
) -> Pin<Box<dyn Future<Output = Result<RpStat>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the stat operation on the specified path.
Require AccessorCapability::Read
Behavior
statempty path means stat backend’s root path.stata path endswith “/” means stating a dir.modeandcontent_lengthmust be set.
sourcefn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpDelete
) -> Pin<Box<dyn Future<Output = Result<RpDelete>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpDelete
) -> Pin<Box<dyn Future<Output = Result<RpDelete>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the delete operation on the specified path.
Require AccessorCapability::Write
Behavior
deleteis an idempotent operation, it’s safe to callDeleteon the same path multiple times.deleteSHOULD returnOk(())if the path is deleted successfully or not exist.
sourcefn list<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpList
) -> Pin<Box<dyn Future<Output = Result<(RpList, Self::Pager)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpList
) -> Pin<Box<dyn Future<Output = Result<(RpList, Self::Pager)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the list operation on the specified path.
Require AccessorCapability::List
Behavior
- Input path MUST be dir path, DON’T NEED to check mode.
- List non-exist dir should return Empty.
sourcefn scan<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpScan
) -> Pin<Box<dyn Future<Output = Result<(RpScan, Self::Pager)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn scan<'life0, 'life1, 'async_trait>(
&'life0 self,
path: &'life1 str,
args: OpScan
) -> Pin<Box<dyn Future<Output = Result<(RpScan, Self::Pager)>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Invoke the scan operation on the specified path.
Require AccessorCapability::Scan
sourcefn presign(&self, path: &str, args: OpPresign) -> Result<RpPresign>
fn presign(&self, path: &str, args: OpPresign) -> Result<RpPresign>
Invoke the presign operation on the specified path.
Require AccessorCapability::Presign
Behavior
- This API is optional, return
std::io::ErrorKind::Unsupportedif not supported.
sourcefn batch<'life0, 'async_trait>(
&'life0 self,
args: OpBatch
) -> Pin<Box<dyn Future<Output = Result<RpBatch>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn batch<'life0, 'async_trait>(
&'life0 self,
args: OpBatch
) -> Pin<Box<dyn Future<Output = Result<RpBatch>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Invoke the batch operations.
sourcefn blocking_create(&self, path: &str, args: OpCreate) -> Result<RpCreate>
fn blocking_create(&self, path: &str, args: OpCreate) -> Result<RpCreate>
Invoke the blocking_create operation on the specified path.
This operation is the blocking version of Accessor::create
Require AccessorCapability::Write and AccessorCapability::Blocking
sourcefn blocking_read(
&self,
path: &str,
args: OpRead
) -> Result<(RpRead, Self::BlockingReader)>
fn blocking_read(
&self,
path: &str,
args: OpRead
) -> Result<(RpRead, Self::BlockingReader)>
Invoke the blocking_read operation on the specified path.
This operation is the blocking version of Accessor::read
Require AccessorCapability::Read and AccessorCapability::Blocking
sourcefn blocking_write(
&self,
path: &str,
args: OpWrite
) -> Result<(RpWrite, Self::BlockingWriter)>
fn blocking_write(
&self,
path: &str,
args: OpWrite
) -> Result<(RpWrite, Self::BlockingWriter)>
Invoke the blocking_write operation on the specified path.
This operation is the blocking version of Accessor::write
Require AccessorCapability::Write and AccessorCapability::Blocking
sourcefn blocking_stat(&self, path: &str, args: OpStat) -> Result<RpStat>
fn blocking_stat(&self, path: &str, args: OpStat) -> Result<RpStat>
Invoke the blocking_stat operation on the specified path.
This operation is the blocking version of Accessor::stat
Require AccessorCapability::Read and AccessorCapability::Blocking
sourcefn blocking_delete(&self, path: &str, args: OpDelete) -> Result<RpDelete>
fn blocking_delete(&self, path: &str, args: OpDelete) -> Result<RpDelete>
Invoke the blocking_delete operation on the specified path.
This operation is the blocking version of Accessor::delete
Require AccessorCapability::Write and AccessorCapability::Blocking
sourcefn blocking_list(
&self,
path: &str,
args: OpList
) -> Result<(RpList, Self::BlockingPager)>
fn blocking_list(
&self,
path: &str,
args: OpList
) -> Result<(RpList, Self::BlockingPager)>
Invoke the blocking_list operation on the specified path.
This operation is the blocking version of Accessor::list
Require AccessorCapability::List and AccessorCapability::Blocking
Behavior
- List non-exist dir should return Empty.
sourcefn blocking_scan(
&self,
path: &str,
args: OpScan
) -> Result<(RpScan, Self::BlockingPager)>
fn blocking_scan(
&self,
path: &str,
args: OpScan
) -> Result<(RpScan, Self::BlockingPager)>
Invoke the blocking_scan operation on the specified path.
Require AccessorCapability::Scan and AccessorCapability::Blocking
Implementations on Foreign Types§
source§impl<T: Accessor + ?Sized> Accessor for Arc<T>
impl<T: Accessor + ?Sized> Accessor for Arc<T>
All functions in Accessor only requires &self, so it’s safe to implement
Accessor for Arc<dyn Accessor>.