serde-xml-rs 0.8.2

xml-rs based deserializer for Serde (compatible with 1.0)
Documentation
use crate::{from_reader, to_writer};
use rstest::rstest;
use serde::{Deserialize, Serialize};
use std::io::Cursor;

#[derive(Debug, PartialEq, Serialize, Deserialize)]
struct Event {
    #[serde(rename = "@type")]
    r#type: String,
    #[serde(rename = "@timestamp")]
    timestamp: String,
    #[serde(rename = "#text")]
    message: String,
}

#[rstest]
#[test_log::test]
fn given_input_with_multiple_root_elements_when_deserializing_muliple_times_then_ok() {
    let text = r#"
        <event type="a" timestamp="2000-01-01T00:00Z">an event</event>
        <event type="b" timestamp="2000-01-01T00:01Z">another event</event>
        "#;

    let mut r = Cursor::new(text);
    from_reader::<Event, _>(&mut r).unwrap();
    from_reader::<Event, _>(&mut r).unwrap();
}

#[rstest]
#[test_log::test]
fn given_multiple_values_when_serializing_multiple_times_then_ok() {
    let mut output = Vec::new();
    let event1 = Event {
        r#type: "a".to_string(),
        timestamp: "2000-01-01T00:00Z".to_string(),
        message: "an event".to_string(),
    };
    let event2 = Event {
        r#type: "b".to_string(),
        timestamp: "2000-01-01T00:01Z".to_string(),
        message: "another event".to_string(),
    };
    to_writer(&mut output, &event1).unwrap();
    to_writer(&mut output, &event2).unwrap();
}