diff --git a/src/idl_gen_rust.cpp b/src/idl_gen_rust.cpp index 72d391e4b13..674ccf96ebe 100644 --- a/src/idl_gen_rust.cpp +++ b/src/idl_gen_rust.cpp @@ -742,6 +742,15 @@ class RustGenerator : public BaseGenerator { code_ += "pub use self::bitflags_{{ENUM_NAMESPACE}}::{{ENUM_TY}};"; code_ += ""; + code_ += "impl {{ENUM_TY}} {"; + code_ += " pub const ENUM_VALUES: &'static [Self] = &["; + ForAllEnumValues1(enum_def, [&](const EnumVal& ev) { + code_.SetValue("VARIANT", namer_.Variant(ev)); + code_ += " Self::{{VARIANT}},"; + }); + code_ += " ];"; + code_ += "}"; + code_.SetValue("INTO_BASE", "self.bits()"); } else { // Normal, c-modelled enums. diff --git a/tests/monster_test/my_game/example/color_generated.rs b/tests/monster_test/my_game/example/color_generated.rs index 5bade500f62..7a2f9e7504f 100644 --- a/tests/monster_test/my_game/example/color_generated.rs +++ b/tests/monster_test/my_game/example/color_generated.rs @@ -19,6 +19,13 @@ mod bitflags_color { } pub use self::bitflags_color::Color; +impl Color { + pub const ENUM_VALUES: &'static [Self] = &[ + Self::Red, + Self::Green, + Self::Blue, + ]; +} impl<'a> ::flatbuffers::Follow<'a> for Color { type Inner = Self; #[inline] diff --git a/tests/monster_test/my_game/example/long_enum_generated.rs b/tests/monster_test/my_game/example/long_enum_generated.rs index efa8f87eaa7..46979dd7d8d 100644 --- a/tests/monster_test/my_game/example/long_enum_generated.rs +++ b/tests/monster_test/my_game/example/long_enum_generated.rs @@ -15,6 +15,13 @@ mod bitflags_long_enum { } pub use self::bitflags_long_enum::LongEnum; +impl LongEnum { + pub const ENUM_VALUES: &'static [Self] = &[ + Self::LongOne, + Self::LongTwo, + Self::LongBig, + ]; +} impl<'a> ::flatbuffers::Follow<'a> for LongEnum { type Inner = Self; #[inline] diff --git a/tests/monster_test_serialize/my_game/example/color_generated.rs b/tests/monster_test_serialize/my_game/example/color_generated.rs index 5a540612b5c..20fdc1ae987 100644 --- a/tests/monster_test_serialize/my_game/example/color_generated.rs +++ b/tests/monster_test_serialize/my_game/example/color_generated.rs @@ -21,6 +21,13 @@ mod bitflags_color { } pub use self::bitflags_color::Color; +impl Color { + pub const ENUM_VALUES: &'static [Self] = &[ + Self::Red, + Self::Green, + Self::Blue, + ]; +} impl Serialize for Color { fn serialize(&self, serializer: S) -> Result where diff --git a/tests/monster_test_serialize/my_game/example/long_enum_generated.rs b/tests/monster_test_serialize/my_game/example/long_enum_generated.rs index bff530afeed..81b266e09c5 100644 --- a/tests/monster_test_serialize/my_game/example/long_enum_generated.rs +++ b/tests/monster_test_serialize/my_game/example/long_enum_generated.rs @@ -17,6 +17,13 @@ mod bitflags_long_enum { } pub use self::bitflags_long_enum::LongEnum; +impl LongEnum { + pub const ENUM_VALUES: &'static [Self] = &[ + Self::LongOne, + Self::LongTwo, + Self::LongBig, + ]; +} impl Serialize for LongEnum { fn serialize(&self, serializer: S) -> Result where