use crate::mqtt::mqtt_property::*;
use nom7::bits::streaming::take as take_bits;
use nom7::bytes::streaming::take_while_m_n;
+use nom7::bytes::complete::take;
use nom7::combinator::{complete, cond, verify};
use nom7::multi::{length_data, many0, many1};
use nom7::number::streaming::*;
}
// parse properties length
match parse_mqtt_variable_integer(input) {
- Ok((rem, mut proplen)) => {
+ Ok((rem, proplen)) => {
if proplen == 0 {
// no properties
return Ok((rem, None));
}
// parse properties
let mut props = Vec::<MQTTProperty>::new();
- let mut newrem = rem;
- while proplen > 0 {
+ let (rem, mut newrem) = take(proplen as usize)(rem)?;
+ while newrem.len() > 0 {
match parse_property(newrem) {
- Ok((rem, val)) => {
+ Ok((rem2, val)) => {
props.push(val);
- let curparselen = (newrem.len() - rem.len()) as u32;
- proplen -= curparselen;
- newrem = rem;
+ newrem = rem2;
}
Err(e) => return Err(e),
}
}
- return Ok((newrem, Some(props)));
+ return Ok((rem, Some(props)));
}
Err(e) => return Err(e),
}