DynamoDB is an AWS database that stores key/value and document data.
serde_dynamo provides a way to serialize and deserialize between data stored in these items and strongly-typed Rust data structures.
Support for aws-sdk-dynamodb, aws_lambda_events, and rusoto_dynamodb is provided via features. See the docs for more details.
See the docs for more examples.
Items received from a aws-sdk-dynamodb call can be run through from_items
.
#[derive(Serialize, Deserialize)]
pub struct User {
id: String,
name: String,
age: u8,
};
// Get documents from DynamoDB
let result = client.scan().table_name("user").send().await?;
// And deserialize them as strongly-typed data structures
if let Some(items) = result.items {
let users: Vec<User> = from_items(items)?;
println!("Got {} users", users.len());
}
Alternatively, to deserialize one item at a time, from_item
can be used.
for item in result.items.unwrap() {
let user: User = from_item(item)?;
println!("{} is {}", user.name, user.age);
}
Writing an entire data structure to DynamoDB typically involves using to_item
to serialize
it.
#[derive(Serialize, Deserialize)]
pub struct User {
id: String,
name: String,
age: u8,
};
// Create a user
let user = User {
id: "fSsgVtal8TpP".to_string(),
name: "Arthur Dent".to_string(),
age: 42,
};
// Turn it into an item that aws-sdk-dynamodb understands
let item = to_item(user)?;
// And write it!
client.put_item().table_name("users").set_item(Some(item)).send().await?;