in src/protocol/resp/src/request/badd.rs [38:82]
fn try_from(other: Message) -> Result<Self, Error> {
if let Message::Array(array) = other {
if array.inner.is_none() {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
let mut array = array.inner.unwrap();
if array.len() < 4 {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
if array.len() % 2 == 1 {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
let outer_key = take_bulk_string(&mut array)?;
if outer_key.is_empty() {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
//loop as long as we have at least 2 arguments after the command
let mut pairs = Vec::with_capacity(array.len() / 2);
while array.len() >= 3 {
let inner_key = take_bulk_string(&mut array)?;
if inner_key.is_empty() {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
let value = take_bulk_string(&mut array)?;
if value.is_empty() {
return Err(Error::new(ErrorKind::Other, "malformed command"));
}
pairs.push((inner_key, value));
}
Ok(Self {
outer_key,
inner_key_value_pairs: Arc::new(Box::<[ArcKeyValuePair]>::from(pairs)),
})
} else {
Err(Error::new(ErrorKind::Other, "malformed command"))
}
}