Skip to content

Missing field on deserialization, serialization works #377

Closed
@AxelMontini

Description

@AxelMontini

I've tried using the library to serialize/deserialize XML for an API but I didn't get far.

There's two tests at the bottom producing this behaviour.
When deserializing, the error is thread 'api::tests::deserialize' panicked at 'called Result::unwrap()on anErrvalue: Custom("missing fieldRequestTimestamp")'.
When serializing, the output (using --nocapture) is <OJP><OJPRequest><ServiceRequest><RequestTimestamp>2022-03-24T07:56:40.192049665Z</RequestTimestamp></ServiceRequest></OJPRequest></OJP>.

use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
struct OJP(OJPRequest);

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
struct OJPRequest(ServiceRequest);

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
struct ServiceRequest {
    request_timestamp: RequestTimestamp,
}

#[derive(Serialize, Deserialize, derive_more::From)]
struct RequestTimestamp(DateTime<Utc>);

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn deserialize() {
        let xml = r#"<OJP><OJPRequest><ServiceRequest><RequestTimestamp>2022-03-24T07:48:03.571299970Z</RequestTimestamp></ServiceRequest></OJPRequest></OJP>"#;

        let ojp: OJP = quick_xml::de::from_str(xml).unwrap();
    }

    #[test]
    fn serialize() {
        let ojp = OJP(OJPRequest(ServiceRequest {
            request_timestamp: Utc::now().into(),
        }));

        println!("{}", quick_xml::se::to_string(&ojp).unwrap());
    }
}

Modifying the xml string like this solves the issue and the library expects RequestTimestamp to be somewhere else.

let xml = r#"<OJP><RequestTimestamp>2022-03-24T07:48:03.571299970Z</RequestTimestamp><OJPRequest><ServiceRequest></ServiceRequest></OJPRequest></OJP>"#;

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionserdeIssues related to mapping from Rust types to XML

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions