This is a UPnP client library for Rust.

Merge pull request #13 from doncato/master

Change Position Parser

authored by tsiry-sandratraina.com and committed by

GitHub 49eb7e09 215044da

+6 -4
+6 -4
src/parser.rs
··· 1 + use std::str::Split; 1 2 use std::time::Duration; 2 3 3 4 use crate::types::{Action, Argument, Container, Device, Item, Metadata, Service, TransportInfo}; ··· 283 284 pub fn parse_position(xml_root: &str) -> Result<u32> { 284 285 let parser = EventReader::from_str(xml_root); 285 286 let mut in_position = false; 287 + let mut position_iter: Split<'_, &str>; 286 288 let mut position: Option<String> = None; 287 289 for e in parser { 288 290 match e { ··· 298 300 } 299 301 Ok(XmlEvent::Characters(position_str)) => { 300 302 if in_position { 301 - let position_str = position_str.replace(':', ""); 302 303 position = Some(position_str); 303 304 } 304 305 } ··· 307 308 } 308 309 309 310 let position = position.ok_or_else(|| anyhow!("Invalid response from device"))?; 310 - let hours = position[0..2].parse::<u32>()?; 311 - let minutes = position[2..4].parse::<u32>()?; 312 - let seconds = position[4..6].parse::<u32>()?; 311 + position_iter = position.split(":"); 312 + let hours = position_iter.next().unwrap_or("0").parse::<u32>()?; 313 + let minutes = position_iter.next().unwrap_or("0").parse::<u32>()?; 314 + let seconds = position_iter.next().unwrap_or("0").parse::<u32>()?; 313 315 Ok(hours * 3600 + minutes * 60 + seconds) 314 316 } 315 317