dynomite icon indicating copy to clipboard operation
dynomite copied to clipboard

Support deriving Attribute trait for newtype structs

Open ramosbugs opened this issue 5 years ago • 1 comments

What did you implement:

Previously, #[derive(Attribute)] only supported enums. This PR adds support for newtype structs as well (i.e., single-field tuple structs containing another Attribute type):

#[derive(Attribute)]
struct Author(String); // <-- `Author` transparently wraps `String` (zero-cost abstraction)

#[derive(Item)]
struct Book {
    #[dynomite(partition_key)]
    id: String,
    author: Author,
}

This functionality mirrors serde's behavior.

How did you verify your change:

Added docs and a couple of test cases.

What (if anything) would need to be called out in the CHANGELOG for the next release:

No breaking changes; just a small new feature.

ramosbugs avatar Dec 16 '20 07:12 ramosbugs

I see this is addressed in #139 :-) ~~looks like clippy is unhappy about self: Self in a bunch of (existing) places:~~

error: the type of the `self` parameter does not need to be arbitrary
Error:    --> dynomite/src/lib.rs:912:18
    |
912 |     fn into_attr(self: Self) -> AttributeValue {
    |                  ^^^^^^^^^^ help: consider to change this parameter to: `self`
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_arbitrary_self_type

~~I can remove the : Self instances if you'd like~~

ramosbugs avatar Dec 16 '20 07:12 ramosbugs