use bytemuck::{Pod, Zeroable}; use macros::RmcSerialize; use rnex_core::rmc::structures::qbuffer::QBuffer; #[derive(RmcSerialize, Debug)] #[rmc_struct(0)] struct UploadCompetitionData { winning_team: u32, splatfest_id: u32, unk_2: u32, unk_3: u32, team_id_1: u8, team_id_2: u8, unk_5: u32, player_data: QBuffer, } #[derive(Copy, Clone, Pod, Zeroable)] #[repr(C)] struct UserData { name: [u16; 0x10], } #[cfg(test)] mod test { use crate::rmc::structures::ranking::{UploadCompetitionData, UserData}; use bytemuck::from_bytes; use rnex_core::rmc::structures::RmcSerialize; use std::io::Cursor; #[test] fn test() { return; let data: [u8; 0xBD] = [ 0x00, 0xB8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x00, 0x00, 0x49, 0x00, 0x7A, 0x00, 0x7A, 0x00, 0x79, 0x00, 0x53, 0x00, 0x50, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0xF2, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x1F, 0x5E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x90, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x14, 0x87, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, ]; let mut cursor = Cursor::new(data); let data = UploadCompetitionData::deserialize(&mut cursor).expect("unable to deserialize data"); let user_data: &UserData = from_bytes(&data.player_data.0[..size_of::()]); let pos = user_data .name .iter() .position(|v| *v == 0x0000) .unwrap_or(0x10); let mut name = user_data.name[0..pos].to_vec(); name.iter_mut().for_each(|v| *v = v.swap_bytes()); let name = String::from_utf16(&name).expect("unable to get name"); println!("{:?}", name); assert!(u8::deserialize(&mut cursor).is_err()) } }