#key-value-store #key-value #wasmcloud #capability #redis #capability-provider #api-bindings

wasmcloud-interface-keyvalue

Interface for wasmCloud actors to access Key-Value stores (wasmcloud:keyvalue)

19 releases (10 breaking)

0.12.0 Sep 19, 2023
0.11.0 Jul 20, 2023
0.10.0 Apr 12, 2023
0.9.1 Nov 23, 2022
0.3.0 Oct 24, 2021

#1237 in Database interfaces

Download history 35/week @ 2024-07-19 12/week @ 2024-07-26 1/week @ 2024-08-02 27/week @ 2024-09-20 15/week @ 2024-09-27 5/week @ 2024-10-04

378 downloads per month

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

52KB
1K SLoC

crates.io  TinyGo Version

wasmCloud Key Value Interface

This is the key-value interface with the contract ID of wasmcloud:keyvalue. This interface defines a set of common operations for interacting with key-value stores.

Note that things like consistency guarantees, backup, failover support, replications, and more are all concerns specific to individual providers and not the interface itself.

Capability Provider Implementations

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

Name Vendor Description
Redis wasmCloud wasmCloud key-value provider for the Redis database
Vault wasmCloud wasmCloud key-value provider for the Hashicorp Vault secrets engine.

Example Usage

🦀 Rust

Check if a value exists in the kvstore

use wasmbus_rpc::actor::prelude::Context;
use wasmcloud_interface_keyvalue::{KeyValue, KeyValueSender};

async fn key_exists(ctx: &Context, key: &str) -> bool {
    KeyValueSender::new().contains(ctx, key).await.is_ok()
}

Increment a numeric value

use wasmbus_rpc::actor::prelude::*;
use wasmcloud_interface_keyvalue::{IncrementRequest, KeyValue, KeyValueSender};
/// increment the counter by the amount, returning the new value
async fn increment_counter(ctx: &Context, key: String, value: i32) -> RpcResult<i32> {
    let new_val = KeyValueSender::new()
        .increment(ctx, &IncrementRequest { key, value })
        .await?;
    Ok(new_val)
}

🐭 Golang

Check if a value exists in the kvstore

import "github.com/wasmcloud/actor-tinygo"
import keyvalue "github.com/wasmcloud/interfaces/keyvalue/tinygo"

func KeyExists(ctx *actor.Context, key string) (bool, error){
   client := keyvalue.NewProviderKeyValue()
   return client.Contains(ctx, key)
}

Increment a numeric value

import "github.com/wasmcloud/actor-tinygo"
import keyvalue "github.com/wasmcloud/interfaces/keyvalue/tinygo"

func IncrementCounter(ctx *actor.Context, key string, value int32) (int32, error) {
   client := keyvalue.NewProviderKeyValue()
   return client.Increment(ctx, keyvalue.IncrementRequest{key, value})
}

Dependencies

~13–30MB
~473K SLoC