dynamodel
This library provides a derive macro to implement conversions between your object and HashMap<String, AttributeValue>.
Usage
use Dynamodel;
use HashMap;
use AttributeValue;
// Using `Dynamodel` macro, you can implement both
// `From<your struct> for HashMap<String, AttributeValue>` and
// `TryFrom<HashMap<String, AttributeValue>> for your struct` traits.
let person = Person ;
let item: = .into;
// Convert from Person into HashMap<String, AttributeValue>.
let converted: = person.clone.into;
assert_eq!;
// Convert from HashMap<String, AttributeValue> into Person.
// This conversion uses std::convert::TryFrom trait, so this returns a Result.
let converted: Person = item.try_into.unwrap;
assert_eq!;
Implicit conversion
This macro implicitly converts some types, so you don't have to add any code. The types are as follows.
| Type | AttributeValue variant | Condition |
|---|---|---|
String |
AttributeValue::S |
none |
u8, u16, u32, u64, u128, usizei8, i16, i32, i64, i128, isizef32, f64 |
AttributeValue::N |
none |
bool |
AttributeValue::Bool |
none |
| Any structs or enums | AttributeValue::M |
must implement bothInto<HashMap<String, AttributeValue>>andTryFrom<HashMap<String, AttributeValue>, Error = ConvertError> |
Vec<inner type> |
AttributeValue::L |
the inner type must be one of the implicit conversion types. |
Option<inner type> |
Depends on the inner type | tye inner type must be one of the implicit conversion types. |
Explicit conversion
Using the field attribute, you can implement custom conversion methods for any type like this.
use ;
use HashMap;
use ;
// Vec<u8> is converted to AttributeValue::L by default,
// but this case, the `data` field is converted to AttributeValue::B.
The function definition must meet these conditions.
| Field attribute | Argument | Return |
|---|---|---|
#[dynamodel(into = "...")] |
field type |
AttributeValue |
#[dynamodel(try_from = "...")] |
&AttributeValue |
Result<field type, ConvertError> |
More features
For more features, refer to this wiki.
License
This software is released under the MIT License.