#object-store #wasmcloud #capability-provider #capability #actor #api-bindings

wasmcloud-interface-blobstore

Interface for accessing an object store over the wasmcloud:blobstore contract

10 releases (breaking)

0.9.0 Sep 19, 2023
0.8.0 Aug 25, 2023
0.7.0 Jul 20, 2023
0.6.0 Apr 12, 2023
0.2.0 Mar 2, 2022

#696 in WebAssembly

Apache-2.0 and maybe LGPL-3.0-or-later

42KB
650 lines

crates.io  TinyGo Version

wasmCloud Blobstore Interface

The blobstore interface abstracts a service (capability provider) that can manage containers and objects. Actors that use this interface must have the capability contract wasmcloud:blobstore in their claims list (wash claims sign --blob_store).

Capability Provider Implementations

The following is a list of implementations of the wasmcloud:blobstore contract. Feel free to submit a PR adding your implementation if you have a community/open source version.

Name Vendor Description
blobstore-s3 wasmCloud An AWS S3 implementation of a blobstore that manages S3 buckets and objects
blobstore-fs wasmCloud An implementation that manages folders and files on a filesystem

Example Usage (🦀 Rust)

Create a container in a blobstore:

use std::result::Result;
use wasmbus_rpc::actor::prelude::*;
use wasmcloud_interface_blobstore::{Blobstore, BlobstoreSender};
async fn create_container(ctx: &Context, container_name: &str) -> Result<(), RpcError> {
    let blobstore = BlobstoreSender::new();
    blobstore
        .create_container(ctx, &container_name.to_string())
        .await
}

Uploading an object (image bytes) to a blobstore:

use std::result::Result;
use wasmbus_rpc::actor::prelude::*;
use wasmcloud_interface_blobstore::{
    Blobstore, BlobstoreSender, Chunk, PutObjectRequest, PutObjectResponse,
};
async fn upload_bytes(ctx: &Context, image_bytes: &[u8]) -> Result<PutObjectResponse, RpcError> {
    BlobstoreSender::new()
        .put_object(
            ctx,
            &PutObjectRequest {
                chunk: Chunk {
                    container_id: "myfolder".to_string(),
                    object_id: "myobjectname".to_string(),
                    bytes: image_bytes.to_vec(),
                    offset: 0,
                    is_last: true,
                },
                content_type: Some("image/png".to_string()),
                ..Default::default()
            },
        )
        .await
}

Dependencies

~12–29MB
~473K SLoC