fn from_bytes()

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)
    }