in core/sdk/src/users/update_user.rs [92:136]
fn from_bytes(bytes: Bytes) -> Result<UpdateUser, IggyError> {
if bytes.len() < 5 {
return Err(IggyError::InvalidCommand);
}
let user_id = Identifier::from_bytes(bytes.clone())?;
let mut position = user_id.get_size_bytes().as_bytes_usize();
let has_username = bytes[position];
if has_username > 1 {
return Err(IggyError::InvalidCommand);
}
position += 1;
let username = if has_username == 1 {
let username_length = bytes[position];
position += 1;
let username = from_utf8(&bytes[position..position + username_length as usize])
.map_err(|_| IggyError::InvalidUtf8)?
.to_string();
position += username_length as usize;
Some(username)
} else {
None
};
let has_status = bytes[position];
if has_status > 1 {
return Err(IggyError::InvalidCommand);
}
let status = if has_status == 1 {
position += 1;
let status = UserStatus::from_code(bytes[position])?;
Some(status)
} else {
None
};
let command = UpdateUser {
user_id,
username,
status,
};
Ok(command)
}