summaryrefslogtreecommitdiff
path: root/tests/include_test
diff options
context:
space:
mode:
authorCasper <casperneo@uchicago.edu>2020-10-19 11:40:03 -0700
committerGitHub <noreply@github.com>2020-10-19 11:40:03 -0700
commit9fa1d27059a69149856c6e003da8c9723fec7506 (patch)
treeda75d0032019f07250ebbd9ae1db0c9d82d17667 /tests/include_test
parenta402b3abaea6490d8aad1fe90d8bafe2a6396fe8 (diff)
downloadflatbuffers-9fa1d27059a69149856c6e003da8c9723fec7506.tar.gz
flatbuffers-9fa1d27059a69149856c6e003da8c9723fec7506.tar.bz2
flatbuffers-9fa1d27059a69149856c6e003da8c9723fec7506.zip
Rework enums in rust. (#6098)
* Rework enums in rust. They're now a unit struct, rather than an enum. This is a backwards incompatible change but the previous version had UB and was also backwards incompatible so... * Update and test sample rust flatbuffers * Use bitflags crate to properly support rust enums. Previously, the bitflags attribute was just ignored. This is a breaking change as the bitflgs API is not like a normal rust enum (duh). * variant_name() -> Option<_> * repr transparent * Reexport bitflags from flatbuffers * Make bitflags constants CamelCase, matching normal enums * Deprecate c-style associated enum constants Co-authored-by: Casper Neo <cneo@google.com>
Diffstat (limited to 'tests/include_test')
-rw-r--r--tests/include_test/include_test1_generated.rs1
-rw-r--r--tests/include_test/sub/include_test2_generated.rs86
2 files changed, 49 insertions, 38 deletions
diff --git a/tests/include_test/include_test1_generated.rs b/tests/include_test/include_test1_generated.rs
index 3c549e01..12b8b08b 100644
--- a/tests/include_test/include_test1_generated.rs
+++ b/tests/include_test/include_test1_generated.rs
@@ -1,6 +1,7 @@
// automatically generated by the FlatBuffers compiler, do not modify
+#![allow(unused_imports, dead_code)]
use crate::include_test2_generated::*;
use std::mem;
diff --git a/tests/include_test/sub/include_test2_generated.rs b/tests/include_test/sub/include_test2_generated.rs
index a3500c97..6cfebf2b 100644
--- a/tests/include_test/sub/include_test2_generated.rs
+++ b/tests/include_test/sub/include_test2_generated.rs
@@ -1,6 +1,7 @@
// automatically generated by the FlatBuffers compiler, do not modify
+#![allow(unused_imports, dead_code)]
use crate::include_test1_generated::*;
use std::mem;
@@ -28,37 +29,50 @@ pub mod other_name_space {
extern crate flatbuffers;
use self::flatbuffers::EndianScalar;
-#[allow(non_camel_case_types)]
-#[repr(i64)]
-#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
-pub enum FromInclude {
- IncludeVal = 0,
-
-}
-
+#[deprecated(since = "1.13", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MIN_FROM_INCLUDE: i64 = 0;
+#[deprecated(since = "1.13", note = "Use associated constants instead. This will no longer be generated in 2021.")]
pub const ENUM_MAX_FROM_INCLUDE: i64 = 0;
+#[deprecated(since = "1.13", note = "Use associated constants instead. This will no longer be generated in 2021.")]
+#[allow(non_camel_case_types)]
+pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
+ FromInclude::IncludeVal,
+];
-impl<'a> flatbuffers::Follow<'a> for FromInclude {
- type Inner = Self;
- #[inline]
- fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
- flatbuffers::read_scalar_at::<Self>(buf, loc)
+#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
+#[repr(transparent)]
+pub struct FromInclude(pub i64);
+#[allow(non_upper_case_globals)]
+impl FromInclude {
+ pub const IncludeVal: Self = Self(0);
+
+ pub const ENUM_MIN: i64 = 0;
+ pub const ENUM_MAX: i64 = 0;
+ pub const ENUM_VALUES: &'static [Self] = &[
+ Self::IncludeVal,
+ ];
+ /// Returns the variant's name or "" if unknown.
+ pub fn variant_name(self) -> Option<&'static str> {
+ match self {
+ Self::IncludeVal => Some("IncludeVal"),
+ _ => None,
+ }
}
}
-
-impl flatbuffers::EndianScalar for FromInclude {
- #[inline]
- fn to_little_endian(self) -> Self {
- let n = i64::to_le(self as i64);
- let p = &n as *const i64 as *const FromInclude;
- unsafe { *p }
+impl std::fmt::Debug for FromInclude {
+ fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
+ if let Some(name) = self.variant_name() {
+ f.write_str(name)
+ } else {
+ f.write_fmt(format_args!("<UNKNOWN {:?}>", self.0))
+ }
}
+}
+impl<'a> flatbuffers::Follow<'a> for FromInclude {
+ type Inner = Self;
#[inline]
- fn from_little_endian(self) -> Self {
- let n = i64::from_le(self as i64);
- let p = &n as *const i64 as *const FromInclude;
- unsafe { *p }
+ fn follow(buf: &'a [u8], loc: usize) -> Self::Inner {
+ Self(flatbuffers::read_scalar_at::<i64>(buf, loc))
}
}
@@ -66,23 +80,19 @@ impl flatbuffers::Push for FromInclude {
type Output = FromInclude;
#[inline]
fn push(&self, dst: &mut [u8], _rest: &[u8]) {
- flatbuffers::emplace_scalar::<FromInclude>(dst, *self);
+ flatbuffers::emplace_scalar::<i64>(dst, self.0);
}
}
-#[allow(non_camel_case_types)]
-pub const ENUM_VALUES_FROM_INCLUDE: [FromInclude; 1] = [
- FromInclude::IncludeVal
-];
-
-#[allow(non_camel_case_types)]
-pub const ENUM_NAMES_FROM_INCLUDE: [&str; 1] = [
- "IncludeVal"
-];
-
-pub fn enum_name_from_include(e: FromInclude) -> &'static str {
- let index = e as i64;
- ENUM_NAMES_FROM_INCLUDE[index as usize]
+impl flatbuffers::EndianScalar for FromInclude {
+ #[inline]
+ fn to_little_endian(self) -> Self {
+ Self(i64::to_le(self.0))
+ }
+ #[inline]
+ fn from_little_endian(self) -> Self {
+ Self(i64::from_le(self.0))
+ }
}
// struct Unused, aligned to 4