Item

Struct Item 

Source
pub struct Item {
    pub attributes: HashMap<String, AttributeValue>,
}
Expand description

dynamodb-formatted json looks something like this:

{
  "profile_picture": { "B": "base64 string" },
  "is_valid": { "BOOL": true },
  "pictures": { "BS": ["base64 1", "base64 2"] },
  "friends": { "L": [{ "S": "bob" }, { "S": "alice" }] },
  "relationship": { "M": { "bob": {"S": "best friend"}, "alice": { "S": "second best friend" } } },
  "age": { "N": "23" },
  "favorite_birthdays": { "NS": ["17", "25"] },
  "children": { "NULL": true },
  "name": { "S": "arthur" },
  "friends": { "SS": ["bob", "alice"] }
}

This stuff exists mostly because WIT maintainers consider list to be dependent on t, which causes much consternation with regard to serialization. Eventually they will likely work it out like json, protocol buffers, msgpack, and many other serialization formats before it.

Examples:


Basic explicit lists:

use momento_functions_host::aws::ddb::Item;
let item: Item = vec![("some key", "some value")].into();
let item: Item = vec![("some key", 42)].into();

Custom bound types:

use momento_functions_host::aws::ddb::{AttributeValue, Item};
struct MyStruct {
    some_attribute: String,
}

// convert into dynamodb format
impl From<MyStruct> for Item {
    fn from(value: MyStruct) -> Self {
        [
            ("some_attribute", AttributeValue::from(value.some_attribute)),
        ].into()
    }
}

// convert from dynamodb format
impl TryFrom<Item> for MyStruct {
    type Error = String;
    fn try_from(mut value: Item) -> Result<Self, Self::Error> {
        Ok(Self {
            some_attribute: value.attributes.remove("some_attribute").ok_or("missing some_attribute")?.try_into()?,
        })
    }
}

let item: Item = MyStruct { some_attribute: "some value".to_string() }.into();

Fields§

§attributes: HashMap<String, AttributeValue>

The item object

Trait Implementations§

Source§

impl Debug for Item

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for Item

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<I, S, V> From<I> for Item
where I: IntoIterator<Item = (S, V)>, S: Into<String>, V: Into<AttributeValue>,

Source§

fn from(value: I) -> Self

Converts to this type from the input type.
Source§

impl Serialize for Item

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

§

impl Freeze for Item

§

impl RefUnwindSafe for Item

§

impl Send for Item

§

impl Sync for Item

§

impl Unpin for Item

§

impl UnwindSafe for Item

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,