Skip to content

Commit 6d3d80a

Browse files
committed
add deser support for enum type
1 parent 46a2f3f commit 6d3d80a

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/idl_gen_rust.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,27 @@ class RustGenerator : public BaseGenerator {
841841
code_ += " }";
842842
code_ += "}";
843843
code_ += "";
844+
845+
code_ += "impl<'de> serde::Deserialize<'de> for {{ENUM_TY}} {";
846+
code_ +=
847+
" fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>";
848+
code_ += " where";
849+
code_ += " D: serde::Deserializer<'de>,";
850+
code_ += " {";
851+
code_ += " let s = String::deserialize(deserializer)?;";
852+
code_ += " for exp in {{ENUM_TY}}::ENUM_VALUES {";
853+
code_ += " if let Some(exp_name) = exp.variant_name()";
854+
code_ += " && exp_name == s";
855+
code_ += " {";
856+
code_ += " return Ok(exp.clone());";
857+
code_ += " }";
858+
code_ += " }";
859+
code_ += " Err(serde::de::Error::custom(format!(";
860+
code_ += " \"Unknown {{ENUM_TY}} variant: {s}\"";
861+
code_ += " )))";
862+
code_ += " }";
863+
code_ += "}";
864+
code_ += "";
844865
}
845866

846867
// Generate Follow and Push so we can serialize and stuff.

0 commit comments

Comments
 (0)