Skip to content

Value/OwnedValue macro doesn't support renaming fields #320

@zeenix

Description

@zeenix

In GitLab by @wynprice999 on Mar 1, 2023, 22:01

It seems like the field names used for deserialization can't be renamed. I would expect using #[zvariant(rename = "...")] would rename the field, but it doesn't appear to have an effect:

Example expansion
#[derive(DeserializeDict, Value, OwnedValue)]
#[zvariant(signature = "dict")]
pub struct TrackMetadata {
    #[zvariant(rename = "otherfield")]
    pub field1: String,

    pub field2: String
}

Expands to the following:

#[zvariant(signature = "dict")]
pub struct TrackMetadata {
    #[zvariant(rename = "otherfield")]
    pub field1: String,
    pub field2: String,
}
...
impl ::std::convert::TryFrom<::zbus::zvariant::OwnedValue> for TrackMetadata {
    type Error = ::zbus::zvariant::Error;
    #[inline]
    fn try_from(
        value: ::zbus::zvariant::OwnedValue,
    ) -> ::zbus::zvariant::Result<Self> {
        let mut fields = <::std::collections::HashMap<
            ::std::string::String,
            ::zbus::zvariant::Value,
        >>::try_from(value)?;
        ::std::result::Result::Ok(Self {
            field1: fields
                .remove("field1")
                .ok_or_else(|| ::zbus::zvariant::Error::IncorrectType)?
                .downcast()
                .ok_or_else(|| ::zbus::zvariant::Error::IncorrectType)?,
            field2: fields
                .remove("field2")
                .ok_or_else(|| ::zbus::zvariant::Error::IncorrectType)?
                .downcast()
                .ok_or_else(|| ::zbus::zvariant::Error::IncorrectType)?,
        })
    }
}
impl From<TrackMetadata> for ::zbus::zvariant::OwnedValue {
    #[inline]
    fn from(s: TrackMetadata) -> Self {
        let mut fields = ::std::collections::HashMap::new();
        fields.insert("field1", ::zbus::zvariant::Value::from(s.field1));
        fields.insert("field2", ::zbus::zvariant::Value::from(s.field2));
        ::zbus::zvariant::Value::from(fields).into()
    }
}

From what I can tell, a solution would involve the following line: https://gitlab.freedesktop.org/dbus/zbus/-/blob/main/zvariant_derive/src/value.rs#L111

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinggood first issueGood for newcomerszvariant_deriveIssues/PRs related to zvariant_derive crate

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions