Skip to content

[Bug] Newtype enum variant deserialization failure when used with #[serde(flatten)] #14

@greenhat616

Description

@greenhat616

previous repo issue: dtolnay/serde-yaml#344

playground link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=5149fbeb995a06e94ecb7e4508ca3b0c

And I have test it via serde_yaml_ng::from_value::<EnumTy>::(&value) , it report the same error too.

The sample enum could be:

#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)]
pub enum ProfileItemType {
    #[serde(rename = "remote")]
    Remote,
    #[serde(rename = "local")]
    #[default]
    Local,
    #[serde(rename = "script")]
    Script(ScriptType),
    #[serde(rename = "merge")]
    Merge,
}

#[derive(Debug, Clone, Serialize, Deserialize, Default, Eq, PartialEq, Hash)]
pub enum ScriptType {
    #[default]
    #[serde(rename = "javascript")]
    JavaScript,
    #[serde(rename = "lua")]
    Lua,
}

#[derive(Default, Debug, Clone, Deserialize, Serialize, Builder, BuilderUpdate)]
pub struct ProfileShared {
    /// profile item type
    /// enum value: remote | local | script | merge
    #[serde(rename = "type")]
    pub r#type: ProfileItemType,
}

#[derive(Default, Delegate, Debug, Clone, Deserialize, Serialize, Builder, BuilderUpdate)]
pub struct MergeProfile {
    #[serde(flatten)]
    pub shared: ProfileShared, // <-- This would be failed when deserialization 
}

Besides the #[serde(flatten)] usage, Just pass a Value::TaggedValue to serde_yaml::from_value always failed.

Any ideas could be shared here? Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions