ddex_parser/parser/
detector.rs1use ddex_core::models::versions::ERNVersion;
2pub 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 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 Ok(ERNVersion::V4_3)
26 }
27 }
28}