ddex_parser/parser/
detector.rs

1use ddex_core::models::versions::ERNVersion;
2// core/src/parser/detector.rs
3
4
5pub struct VersionDetector;
6
7impl VersionDetector {
8    pub fn detect<R: std::io::Read>(reader: R) -> crate::error::Result<ERNVersion> {
9        let mut buf = Vec::new();
10        let mut reader = std::io::BufReader::new(reader);
11        use std::io::Read;
12        reader.read_to_end(&mut buf)?;
13        
14        let xml_str = String::from_utf8_lossy(&buf);
15        
16        // Check for version in namespace
17        if xml_str.contains("http://ddex.net/xml/ern/382") {
18            Ok(ERNVersion::V3_8_2)
19        } else if xml_str.contains("http://ddex.net/xml/ern/42") {
20            Ok(ERNVersion::V4_2)
21        } else if xml_str.contains("http://ddex.net/xml/ern/43") {
22            Ok(ERNVersion::V4_3)
23        } else {
24            // Default to latest
25            Ok(ERNVersion::V4_3)
26        }
27    }
28}