ddex_parser/streaming/
verification.rs

1//! Verification script for model-aligned comprehensive streaming parser
2
3use crate::streaming::comprehensive::{ComprehensiveStreamIterator, StreamingElement};
4use ddex_core::models::versions::ERNVersion;
5use std::io::Cursor;
6
7pub fn verify_comprehensive_parser() {
8    let xml = r#"<?xml version="1.0" encoding="UTF-8"?>
9<ERNMessage xmlns="http://ddex.net/xml/ern/43">
10    <MessageHeader>
11        <MessageId>test-message-1</MessageId>
12        <MessageCreatedDateTime>2023-01-01T00:00:00</MessageCreatedDateTime>
13    </MessageHeader>
14    <Release ReleaseReference="REL001">
15        <ReleaseTitle>Test Release</ReleaseTitle>
16        <Genre>Rock</Genre>
17    </Release>
18    <Resource ResourceReference="RES001">
19        <Title>Test Resource</Title>
20        <Duration>180</Duration>
21    </Resource>
22</ERNMessage>"#;
23
24    println!("Testing comprehensive streaming parser with model alignment...");
25
26    let cursor = Cursor::new(xml.as_bytes());
27    let iterator = ComprehensiveStreamIterator::new(cursor, ERNVersion::V4_3);
28
29    let mut element_count = 0;
30    let mut header_found = false;
31    let mut release_found = false;
32    let mut resource_found = false;
33
34    for result in iterator {
35        match result {
36            Ok(element) => {
37                element_count += 1;
38                match element {
39                    StreamingElement::Header(_header) => {
40                        println!("✅ Parsed MessageHeader successfully");
41                        header_found = true;
42                    }
43                    StreamingElement::Release(release) => {
44                        println!("✅ Parsed Release: reference={}", release.release_reference);
45                        println!("   Titles: {}", release.release_title.len());
46                        println!("   Genres: {}", release.genre.len());
47                        release_found = true;
48                    }
49                    StreamingElement::Resource(resource) => {
50                        println!(
51                            "✅ Parsed Resource: reference={}",
52                            resource.resource_reference
53                        );
54                        println!("   Titles: {}", resource.reference_title.len());
55                        if let Some(duration) = resource.duration {
56                            println!("   Duration: {}s", duration.as_secs());
57                        }
58                        resource_found = true;
59                    }
60                    StreamingElement::Party(_party) => {
61                        println!("✅ Parsed Party");
62                    }
63                    StreamingElement::EndOfStream => {
64                        println!("✅ End of stream reached");
65                    }
66                }
67            }
68            Err(e) => {
69                println!("❌ Error parsing: {:?}", e);
70            }
71        }
72    }
73
74    println!("\n=== Verification Results ===");
75    println!("Total elements parsed: {}", element_count);
76    println!("Header found: {}", header_found);
77    println!("Release found: {}", release_found);
78    println!("Resource found: {}", resource_found);
79
80    if header_found && release_found && resource_found {
81        println!("🎉 Model alignment verification PASSED!");
82    } else {
83        println!("❌ Model alignment verification FAILED!");
84    }
85}
86
87#[cfg(test)]
88mod tests {
89    use super::*;
90
91    #[test]
92    fn test_model_alignment() {
93        verify_comprehensive_parser();
94    }
95}