dynomite

Crates.iodynomite
lib.rsdynomite
version0.10.0
sourcesrc
created_at2018-02-25 20:09:08.747859
updated_at2020-09-06 04:36:25.293452
descriptionProvides set of high-level productive DynamoDB interfaces
homepagehttps://github.com/softprops/dynomite
repositoryhttps://github.com/softprops/dynomite
max_upload_size
id52818
size143,082
cargo (github:rustpq:cargo)

documentation

https://docs.rs/dynomite

README

๐Ÿฆ€๐Ÿงจ

dynomite

dynomite makes DynamoDB fit your types (and visa versa)


Overview

Goals

  • โšก make writing dynamodb applications in rust a productive experience
  • ๐Ÿฆ€ exploit rust's type safety features
  • ๐Ÿ‘ฉโ€๐Ÿ’ป leverage existing work of the rusoto rust project
  • โ˜” commitment to supporting applications built using stable rust
  • ๐Ÿ“š commitment to documentation

Features

  • ๐Ÿ’Œ less boilerplate

  • โ™ป๏ธ automatic async pagination

  • ๐Ÿ•ถ๏ธ client level retry interfaces for robust error handling

From this

use std::collections::HashMap;
use rusoto_dynamodb::AttributeValue;
use uuid::Uuid;

let mut item = HashMap.new();
item.insert(
  "pk".to_string(), AttributeValue {
    s: Some(Uuid::new_v4().to_hyphenated().to_string()),
    ..AttributeValue::default()
  }
);
item.insert(
  // ๐Ÿคฌtypos anyone?
  "quanity".to_string(), AttributeValue {
    n: Some("whoops".to_string()),
    ..AttributeValue::default()
  }
);

To this

use dynomite::Item;
use uuid::Uuid;

#[derive(Item)]
struct Order {
  #[dynomite(partition_key)]
  pk: Uuid,
  quantity: u16
}

let item = Order {
  pk: Uuid::new_v4(),
  quantity: 4
}.into();

Please see the API documentation for how to get started. Enjoy.

๐Ÿ“ฆ Install

In your Cargo.toml file, add the following under the [dependencies] heading

dynomite = "0.10"

๐Ÿคธ Examples

You can find some example application code under dynomite/examples

DynamoDB local

AWS provides a convenient way to host a local instance of DynamoDB for testing.

Here is a short example of how to get up a testing locally quickly with both dynomite as well as rusoto_dynamodb.

In one terminal spin up a Docker container for DynamoDB local listening on port 8000

$ docker run --rm -p 8000:8000 amazon/dynamodb-local

In another, run a rust binary with a client initialized like you see the the local.rs example

Resources

Doug Tangren (softprops) 2018-2020

Commit count: 415

cargo fmt