[rust] add deser support for enum type (#8803)

* add deser support for enum type

* update generated files

* remove deser generator when bitflag enable

* add deser test

* Restore the Rust editions version

* Remove unnecessary modifications
This commit is contained in:
Fawdlstty
2025-12-03 11:48:45 +08:00
committed by GitHub
parent a5343d6116
commit 17ceaae16e
8 changed files with 129 additions and 2 deletions

View File

@@ -71,6 +71,25 @@ impl Serialize for AnyAmbiguousAliases {
}
}
impl<'de> serde::Deserialize<'de> for AnyAmbiguousAliases {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
for item in AnyAmbiguousAliases::ENUM_VALUES {
if let Some(item_name) = item.variant_name() {
if item_name == s {
return Ok(item.clone());
}
}
}
Err(serde::de::Error::custom(format!(
"Unknown AnyAmbiguousAliases variant: {s}"
)))
}
}
impl<'a> flatbuffers::Follow<'a> for AnyAmbiguousAliases {
type Inner = Self;
#[inline]

View File

@@ -71,6 +71,25 @@ impl Serialize for Any {
}
}
impl<'de> serde::Deserialize<'de> for Any {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
for item in Any::ENUM_VALUES {
if let Some(item_name) = item.variant_name() {
if item_name == s {
return Ok(item.clone());
}
}
}
Err(serde::de::Error::custom(format!(
"Unknown Any variant: {s}"
)))
}
}
impl<'a> flatbuffers::Follow<'a> for Any {
type Inner = Self;
#[inline]

View File

@@ -71,6 +71,25 @@ impl Serialize for AnyUniqueAliases {
}
}
impl<'de> serde::Deserialize<'de> for AnyUniqueAliases {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
for item in AnyUniqueAliases::ENUM_VALUES {
if let Some(item_name) = item.variant_name() {
if item_name == s {
return Ok(item.clone());
}
}
}
Err(serde::de::Error::custom(format!(
"Unknown AnyUniqueAliases variant: {s}"
)))
}
}
impl<'a> flatbuffers::Follow<'a> for AnyUniqueAliases {
type Inner = Self;
#[inline]

View File

@@ -71,6 +71,25 @@ impl Serialize for Race {
}
}
impl<'de> serde::Deserialize<'de> for Race {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
for item in Race::ENUM_VALUES {
if let Some(item_name) = item.variant_name() {
if item_name == s {
return Ok(item.clone());
}
}
}
Err(serde::de::Error::custom(format!(
"Unknown Race variant: {s}"
)))
}
}
impl<'a> flatbuffers::Follow<'a> for Race {
type Inner = Self;
#[inline]

View File

@@ -59,6 +59,25 @@ impl Serialize for FromInclude {
}
}
impl<'de> serde::Deserialize<'de> for FromInclude {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
for item in FromInclude::ENUM_VALUES {
if let Some(item_name) = item.variant_name() {
if item_name == s {
return Ok(item.clone());
}
}
}
Err(serde::de::Error::custom(format!(
"Unknown FromInclude variant: {s}"
)))
}
}
impl<'a> flatbuffers::Follow<'a> for FromInclude {
type Inner = Self;
#[inline]