pub trait Accessor: Send + Sync + Debug {
    fn metadata(&self) -> AccessorMetadata { ... }
    fn create<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpCreate
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } fn read<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpRead
    ) -> Pin<Box<dyn Future<Output = Result<BytesReader>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } fn write<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpWrite
    ) -> Pin<Box<dyn Future<Output = Result<BytesWriter>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } fn stat<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpStat
    ) -> Pin<Box<dyn Future<Output = Result<ObjectMetadata>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } fn delete<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpDelete
    ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } fn list<'life0, 'life1, 'async_trait>(
        &'life0 self,
        args: &'life1 OpList
    ) -> Pin<Box<dyn Future<Output = Result<DirStreamer>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
, { ... } }
Expand description

Underlying trait of all backends for implementors.

Note to users

Only service implementor should care about this trait, users need to use Operator instead.

Note to services

  • Path in args will all be normalized into the same style, services should handle them based on services requirement.

Provided Methods

Invoke the metadata operation to get metadata of accessor.

Invoke the create operation on the specified path

Behavior
  • Input path MUST match with ObjectMode, DON’T NEED to check object mode.
  • Create on existing dir SHOULD succeed.
  • Create on existing file SHOULD overwrite and truncate.

Invoke the read operation on the specified path, returns a BytesReader if operate successful.

Behavior
  • Input path MUST be file path, DON’T NEED to check object mode.

Invoke the write operation on the specified path, returns a BytesWriter if operate successful.

Behavior
  • Input path MUST be file path, DON’T NEED to check object mode.

Invoke the stat operation on the specified path.

Behavior
  • stat empty path means stat backend’s root path.
  • stat a path endswith “/” means stating a dir.

Invoke the delete operation on the specified path.

Behavior
  • delete is an idempotent operation, it’s safe to call Delete on the same path multiple times.
  • delete SHOULD return Ok(()) if the path is deleted successfully or not exist.

Invoke the list operation on the specified path.

Behavior
  • Input path MUST be dir path, DON’T NEED to check object mode.

Implementations on Foreign Types

All functions in Accessor only requires &self, so it’s safe to implement Accessor for Arc<dyn Accessor>.

Implementors