#dynamo-db #rusoto #rusoto-dynamodb

dynomite

Provides set of high-level productive DynamoDB interfaces

21 unstable releases (10 breaking)

0.10.0 Sep 6, 2020
0.9.0 Jul 14, 2020
0.8.2 Jun 4, 2020
0.7.0 Nov 3, 2019
0.1.3 Mar 8, 2018

#737 in Database interfaces

Download history 6/week @ 2024-07-19 11/week @ 2024-07-26 7/week @ 2024-08-02 13/week @ 2024-08-09 4/week @ 2024-08-16 1/week @ 2024-08-23 5/week @ 2024-08-30 11/week @ 2024-09-06 10/week @ 2024-09-13 37/week @ 2024-09-20 19/week @ 2024-09-27 5/week @ 2024-10-04 8/week @ 2024-10-11 8/week @ 2024-10-18 13/week @ 2024-10-25 32/week @ 2024-11-01

61 downloads per month
Used in sim1h

MIT license

80KB
2K SLoC

๐Ÿฆ€๐Ÿงจ

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

Dependencies

~21MB
~364K SLoC