Crate nitroglycerin[][src]

Expand description

High level dynamodb crate

use nitroglycerin::{Attributes, Key, Query, Table, DynamoDb, dynamodb::DynamoDbClient};
use rusoto_core::Region;

#[derive(Debug, PartialEq, Attributes, Key, Query)]
struct Employee {
    #[nitro(partition_key)]
    id: String,
    #[nitro(rename = "firstName")]
    name: String,
    joined: i64,
    left: Option<i64>,
}

impl Table for Employee {
    fn table_name() -> String {
        "Employees".to_string()
    }
}

#[derive(Debug, PartialEq, Attributes, Query)]
struct EmployeeNameIndex {
    #[nitro(partition_key, rename = "firstName")]
    name: String,
    #[nitro(sort_key)]
    joined: i64,
}

impl IndexTable for EmployeeNameIndex {
    type Table = Employees;
    fn index_name() -> Option<String> {
        Some("EmployeeNamesIndex".to_string())
    }
}

let client = DynamoDbClient::new(Region::default());

let employee: Option<Employee> = client.get::<Employee>()
   .id("emp_1") // get the employee with id "emp_1"
   .execute().await?;

let new_employee = Employee {
   id: "emp_1234".into(),
   name: "Conrad".into(),
   joined: 1626900000,
   left: None,
};
// Put the new employee item into the db
client.put(new_employee).execute().await?;

let employees: Vec<EmployeeNameIndex> = client.query::<EmployeeNameIndex>()
   .name("John") // query the db for all employees named "John"
   .execute().await?;

let employees: Vec<EmployeeNameIndex> = client.query::<EmployeeNameIndex>()
   .name("John") // query the db for all employees named "John"
   .joined().between(1626649200, 1626735600) // and who joined between 2021-07-19 and 2021-07-20
   .execute().await?;

Re-exports

pub use rusoto_dynamodb as dynamodb;

Modules

module covering conversions to and from dynamodb attribute values

collection of functions and types used to make delete item requests

collection of functions and types used to make key requests

collection of functions and types used to make put item requests

collection of functions and types used to make query requests

Enums

Error returned when parsing attribute values

Error returned by dynamodb requests

Traits

Extension trait providing high level implementations of dynamodb requests

Trait indicating that a type is a dynamodb table

Trait indicating that a type is a dynamodb index

Type Definitions

Convenient type for a attribute value map

Derive Macros

Implement Into<Attributes> and TryFrom<Attributes>

Implement a strongly typed key builder. This is used to setup get requests

Implement a strongly typed query builder. This is used to setup query requests