Crate opendal

source ·
Expand description

Apache OpenDAL™ is an Open Data Access Layer that enables seamless interaction with diverse storage services.

OpenDAL’s development is guided by its vision of One Layer, All Storage and its core principles: Open Community, Solid Foundation, Fast Access, Object Storage First, and Extensible Architecture. Read the explained vision at OpenDAL Vision.

§Quick Start

OpenDAL’s API entry points are Operator and BlockingOperator. All public APIs are accessible through the operator. To utilize OpenDAL, you need to:

§Init a service

The first step is to pick a service and init it with a builder. All supported services could be found at services.

Let’s take services::S3 as an example:

use opendal::services;
use opendal::Operator;
use opendal::Result;

fn main() -> Result<()> {
    // Pick a builder and configure it.
    let mut builder = services::S3::default().bucket("test");

    // Init an operator
    let op = Operator::new(builder)?.finish();
    Ok(())
}

§Compose layers

The next setup is to compose layers. Layers are modules that provide extra features for every operation. All builtin layers could be found at layers.

Let’s use layers::LoggingLayer as an example; this layer adds logging to every operation that OpenDAL performs.

use opendal::layers::LoggingLayer;
use opendal::services;
use opendal::Operator;
use opendal::Result;

#[tokio::main]
async fn main() -> Result<()> {
    // Pick a builder and configure it.
    let mut builder = services::S3::default().bucket("test");

    // Init an operator
    let op = Operator::new(builder)?
        // Init with logging layer enabled.
        .layer(LoggingLayer::default())
        .finish();

    Ok(())
}

§Use operator

The final step is to use the operator. OpenDAL supports both async Operator and blocking BlockingOperator. Please pick the one that fits your use case.

Every Operator API follows the same pattern, take read as an example:

  • read: Execute a read operation.
  • read_with: Execute a read operation with additional options, like range and if_match.
  • reader: Create a reader for streaming data, enabling flexible access.
  • reader_with: Create a reader with advanced options.
use opendal::layers::LoggingLayer;
use opendal::services;
use opendal::Operator;
use opendal::Result;

#[tokio::main]
async fn main() -> Result<()> {
    // Pick a builder and configure it.
    let mut builder = services::S3::default().bucket("test");

    // Init an operator
    let op = Operator::new(builder)?
        // Init with logging layer enabled.
        .layer(LoggingLayer::default())
        .finish();

    // Fetch this file's metadata
    let meta = op.stat("hello.txt").await?;
    let length = meta.content_length();

    // Read data from `hello.txt` with range `0..1024`.
    let bs = op.read_with("hello.txt").range(0..1024).await?;

    Ok(())
}

Modules§

  • docsdocsrs
    This module holds documentation for OpenDAL.
  • executors module provides implementations for the Execute trait for widely used runtimes.
  • Layer is the mechanism to intercept operations.
  • Functions provides the functions generated by BlockingOperator
  • Futures provides the futures generated by Operator
  • Raw modules provide raw APIs that used by underlying services
  • Services will provide builders to build underlying backends.

Structs§

Enums§

  • EntryMode represents the mode.
  • ErrorKind is all kinds of Error of opendal.
  • Services that OpenDAL supports

Traits§

  • Builder is used to set up underlying services.
  • Configurator is used to configure the underlying service.
  • Execute trait is used to execute task in background.
  • IntoDeleteInput is a helper trait that makes it easier for users to play with Deleter.

Type Aliases§

  • Result that is a wrapper of Result<T, opendal::Error>