[storage] Allow one variant enum to derive SpreadLayout#942
Merged
Robbepop merged 3 commits intouse-ink:masterfrom Sep 27, 2021
Merged
[storage] Allow one variant enum to derive SpreadLayout#942Robbepop merged 3 commits intouse-ink:masterfrom
Robbepop merged 3 commits intouse-ink:masterfrom
Conversation
I have an enum that has only one variant, and I want to store the enum value in the storage. I might add new variants later in development, so the enum is not useless.
The current implementation doesn't allow to derive the `SpreadLayout` trait for one variant enums, and I fixed it on this PR.
# Sample code
```rust
#![cfg_attr(not(feature = "std"), no_std)]
use ink_lang as ink;
#[derive(
Copy,
Clone,
scale::Encode,
scale::Decode,
ink_storage::traits::SpreadLayout,
ink_storage::traits::PackedLayout,
)]
#[cfg_attr(
feature = "std",
derive(scale_info::TypeInfo, ink_storage::traits::StorageLayout)
)]
pub enum MyEnum {
A,
}
#[ink::contract]
mod enum_test {
use super::MyEnum;
#[ink(storage)]
pub struct EnumTest {
value: MyEnum,
}
impl EnumTest {
#[ink(constructor)]
pub fn new() -> Self {
Self { value: MyEnum::A }
}
#[ink(message)]
pub fn get(&self) -> MyEnum {
self.value
}
}
}
```
Without this change, I get this error.
```
$ cargo +nightly contract build
[1/5] Building cargo project
Updating crates.io index
Compiling enum_test v0.1.0 (/private/var/folders/zn/l2f569z56vnghtt524x1mv6w0000gn/T/cargo-contract_FM50JF)
error: proc-macro derive panicked
--> /snip/enum_test/lib.rs:10:5
|
10 | ink_storage::traits::SpreadLayout,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: can only operate on enums
```
Robbepop
reviewed
Sep 27, 2021
Collaborator
Robbepop
left a comment
There was a problem hiding this comment.
Thank you for the PR. All in all LGTM.
Co-authored-by: Robin Freyler <robbepop@web.de>
Codecov Report
@@ Coverage Diff @@
## master #942 +/- ##
==========================================
- Coverage 82.88% 82.86% -0.03%
==========================================
Files 177 177
Lines 8058 8059 +1
==========================================
- Hits 6679 6678 -1
- Misses 1379 1381 +2
Continue to review full report at Codecov.
|
Contributor
Author
|
Thank you for your review. CI passed. |
Robbepop
approved these changes
Sep 27, 2021
Collaborator
Robbepop
left a comment
There was a problem hiding this comment.
LGTM
Thank you a lot for writing the test case!
This PR really is an improvement. :)
tash-2s
added a commit
to tash-2s/open-emoji-battler
that referenced
this pull request
Oct 2, 2021
ascjones
pushed a commit
that referenced
this pull request
Oct 11, 2021
* [storage] Allow one variant enum to derive SpreadLayout
I have an enum that has only one variant, and I want to store the enum value in the storage. I might add new variants later in development, so the enum is not useless.
The current implementation doesn't allow to derive the `SpreadLayout` trait for one variant enums, and I fixed it on this PR.
# Sample code
```rust
#![cfg_attr(not(feature = "std"), no_std)]
use ink_lang as ink;
#[derive(
Copy,
Clone,
scale::Encode,
scale::Decode,
ink_storage::traits::SpreadLayout,
ink_storage::traits::PackedLayout,
)]
#[cfg_attr(
feature = "std",
derive(scale_info::TypeInfo, ink_storage::traits::StorageLayout)
)]
pub enum MyEnum {
A,
}
#[ink::contract]
mod enum_test {
use super::MyEnum;
#[ink(storage)]
pub struct EnumTest {
value: MyEnum,
}
impl EnumTest {
#[ink(constructor)]
pub fn new() -> Self {
Self { value: MyEnum::A }
}
#[ink(message)]
pub fn get(&self) -> MyEnum {
self.value
}
}
}
```
Without this change, I get this error.
```
$ cargo +nightly contract build
[1/5] Building cargo project
Updating crates.io index
Compiling enum_test v0.1.0 (/private/var/folders/zn/l2f569z56vnghtt524x1mv6w0000gn/T/cargo-contract_FM50JF)
error: proc-macro derive panicked
--> /snip/enum_test/lib.rs:10:5
|
10 | ink_storage::traits::SpreadLayout,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: can only operate on enums
```
* Update crates/storage/derive/src/spread_layout.rs
Co-authored-by: Robin Freyler <robbepop@web.de>
* cargo fmt
Co-authored-by: Robin Freyler <robbepop@web.de>
ascjones
added a commit
that referenced
this pull request
Oct 11, 2021
* Bump scale-info requirement to 0.9 * Update manual TypeInfo impls * Use decode feature of scale-info * scale-info 1.0 * Fix tests, 0 indexing on type registry * Update some missing examples * TMP: use ink rc5 for compat with cargo-contract * Update RELEASES.md * Bump versions back to 1.0 * Introduce versioning of ink metadata format * Update RELEASES.md Co-authored-by: Michael Müller <michi@parity.io> * Update crates/metadata/src/lib.rs Co-authored-by: Michael Müller <michi@parity.io> * Clippy: allow large enum variant * [storage] Allow one variant enum to derive SpreadLayout (#942) * [storage] Allow one variant enum to derive SpreadLayout I have an enum that has only one variant, and I want to store the enum value in the storage. I might add new variants later in development, so the enum is not useless. The current implementation doesn't allow to derive the `SpreadLayout` trait for one variant enums, and I fixed it on this PR. # Sample code ```rust #![cfg_attr(not(feature = "std"), no_std)] use ink_lang as ink; #[derive( Copy, Clone, scale::Encode, scale::Decode, ink_storage::traits::SpreadLayout, ink_storage::traits::PackedLayout, )] #[cfg_attr( feature = "std", derive(scale_info::TypeInfo, ink_storage::traits::StorageLayout) )] pub enum MyEnum { A, } #[ink::contract] mod enum_test { use super::MyEnum; #[ink(storage)] pub struct EnumTest { value: MyEnum, } impl EnumTest { #[ink(constructor)] pub fn new() -> Self { Self { value: MyEnum::A } } #[ink(message)] pub fn get(&self) -> MyEnum { self.value } } } ``` Without this change, I get this error. ``` $ cargo +nightly contract build [1/5] Building cargo project Updating crates.io index Compiling enum_test v0.1.0 (/private/var/folders/zn/l2f569z56vnghtt524x1mv6w0000gn/T/cargo-contract_FM50JF) error: proc-macro derive panicked --> /snip/enum_test/lib.rs:10:5 | 10 | ink_storage::traits::SpreadLayout, | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = help: message: can only operate on enums ``` * Update crates/storage/derive/src/spread_layout.rs Co-authored-by: Robin Freyler <robbepop@web.de> * cargo fmt Co-authored-by: Robin Freyler <robbepop@web.de> * CI: remove gcda files from cache (#943) * Update pretty_assertions requirement from 0.7.1 to 1.0.0 (#944) Updates the requirements on [pretty_assertions](https://github.com/colin-kiegel/rust-pretty-assertions) to permit the latest version. - [Release notes](https://github.com/colin-kiegel/rust-pretty-assertions/releases) - [Changelog](https://github.com/colin-kiegel/rust-pretty-assertions/blob/main/CHANGELOG.md) - [Commits](rust-pretty-assertions/rust-pretty-assertions@v0.7.1...v1.0.0) --- updated-dependencies: - dependency-name: pretty_assertions dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Add 'versioning' to spellcheck dict Co-authored-by: Michael Müller <michi@parity.io> Co-authored-by: tash-2s <81064017+tash-2s@users.noreply.github.com> Co-authored-by: Robin Freyler <robbepop@web.de> Co-authored-by: Denis Pisarev <denis.pisarev@parity.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I have an enum that has only one variant, and I want to store the enum value in the storage. I might add new variants later in development, so the enum is not useless.
The current implementation doesn't allow to derive the
SpreadLayouttrait for one variant enums, and I fixed it on this PR.Sample code
Without this change, I get this error.