From abb2170186d4c8159157949b1c695f6e56e8ebff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20K=C3=A4nner?= Date: Tue, 20 Aug 2024 15:29:07 +0200 Subject: [PATCH] actually set set enum variant when deserializing --- src/parser.rs | 4 ++-- tests/enum.rs | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index dabd9e1..d45d675 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -647,7 +647,7 @@ impl Enum { D: ::serde::Deserializer<'de>, { let ::core::result::Result::Ok(key) = keys.next::() else { - ::deserialize(de).map_err(|err| ::miniconf::Error::Inner(0, err))?; + *self = ::deserialize(de).map_err(|err| ::miniconf::Error::Inner(0, err))?; return ::core::result::Result::Ok(0); }; let index = ::miniconf::Key::find::(&key).ok_or(::miniconf::Traversal::NotFound(1))?; @@ -656,7 +656,7 @@ impl Enum { } match index { 0 => { - ::deserialize(de).map_err(|err| ::miniconf::Error::Inner(0, err))?; + *self = ::deserialize(de).map_err(|err| ::miniconf::Error::Inner(0, err))?; Ok(0) } 1..=#num_keys => ::core::result::Result::Err(::miniconf::Traversal::Access(0, "Cannot write limits").into()), diff --git a/tests/enum.rs b/tests/enum.rs index af3c441..314b266 100644 --- a/tests/enum.rs +++ b/tests/enum.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use std::str::from_utf8; /// Description -#[derive(Default, ConfigEnum, Serialize, Deserialize)] +#[derive(Debug, Default, PartialEq, Eq, ConfigEnum, Serialize, Deserialize)] enum Test { #[default] Variant1, @@ -56,4 +56,7 @@ fn deserialize( let res = config.set_json(path, b"\"Variant3\""); assert_eq!(res, expected); + if res.is_ok() { + assert_eq!(config, Test::Variant3); + } }