Unverified Commit fd94d383 authored by tash-2s's avatar tash-2s Committed by GitHub
Browse files

[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

#![cfg_attr(not(feature = "std"), no_std)]

use ink_lang as ink;

    feature = "std",
    derive(scale_info::TypeInfo, ink_storage::traits::StorageLayout)
pub enum MyEnum {

mod enum_test {
    use super::MyEnum;

    pub struct EnumTest {
        value: MyEnum,

    impl EnumTest {
        pub fn new() -> Self {
            Self { value: MyEnum::A }

        pub fn get(&self) -> MyEnum {

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: Hero Bird's avatarRobin Freyler <robbepop@web.de>

* cargo fmt
Co-authored-by: Hero Bird's avatarRobin Freyler <robbepop@web.de>
parent beaf989c
Pipeline #159475 passed with stages
in 32 minutes and 36 seconds