Open momvart opened 7 months ago
In config-rs
, the variant_seed
cannot create a deserializer on enums with unrecognized values.
variant_deserializer
only allows name with given str.
I got a straightforward fix to demostrate this, it is not the best.
diff --git a/src/de.rs b/src/de.rs
index 0e2b8de..4d014e9 100644
--- a/src/de.rs
+++ b/src/de.rs
@@ -313,8 +313,13 @@ impl<'de> de::EnumAccess<'de> for EnumAccess {
ValueKind::String(ref s) => self.variant_deserializer(s),
ValueKind::Table(ref t) => self.table_deserializer(t),
_ => Err(self.structural_error()),
- }?;
- seed.deserialize(deserializer)?
+ };
+ if let Ok(deserializer) = deserializer {
+ seed.deserialize(deserializer)?
+ } else {
+ let deserializer = self.value.clone();
+ seed.deserialize(deserializer)?
+ }
};
Ok((value, self))
Here is a failing example demonstrating that enum variant aliases are not taken into account. It also shows a divergence in behavior compared to using
serde_json
directly.Output: