Compare commits

2 Commits
peq ... master

Author SHA1 Message Date
6775e4122b approximate round trip test 2025-12-15 15:16:57 -08:00
a34ecc4537 update roblox_bot_file 2025-12-15 15:14:03 -08:00
3 changed files with 31 additions and 5 deletions

4
Cargo.lock generated
View File

@@ -208,9 +208,9 @@ checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
[[package]]
name = "strafesnet_roblox_bot_file"
version = "0.7.0"
version = "0.8.1"
source = "sparse+https://git.itzana.me/api/packages/strafesnet/cargo/"
checksum = "d06e3ded397bd8088ff7d3d3a94afedae798eee8b386601ba13b745858b53f94"
checksum = "33d0fa524476d8b6cf23269b0c9cff6334b70585546b807cb8ec193858defecd"
dependencies = [
"binrw",
"bitflags",

View File

@@ -5,6 +5,6 @@ edition = "2024"
[dependencies]
futures = "0.3.31"
strafesnet_roblox_bot_file = { version = "0.7.0", registry = "strafesnet" }
strafesnet_roblox_bot_file = { version = "0.8.1", registry = "strafesnet" }
tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread", "fs"] }
tokio-stream = { version = "0.1.17", features = ["fs"] }

View File

@@ -10,7 +10,7 @@ enum Error{
Io(std::io::Error),
BotFile{
path:PathBuf,
err:v0::Error
err:RoundTripError,
},
Join(tokio::task::JoinError),
}
@@ -24,6 +24,14 @@ impl From<tokio::task::JoinError> for Error{
Self::Join(value)
}
}
#[expect(dead_code)]
#[derive(Debug)]
enum RoundTripError{
Decode(v0::Error),
Encode(strafesnet_roblox_bot_file::BinrwError),
RoundTripDecode(v0::Error),
NotEqual,
}
#[tokio::main]
async fn main()->Result<(),Error>{
const PREFETCH_QUEUE:usize=64;
@@ -82,7 +90,25 @@ async fn main()->Result<(),Error>{
.buffer_unordered(PREFETCH_QUEUE)
.map(|result:Result<_,Error>|async move{
let (path,file)=result?;
let result=tokio::task::spawn_blocking(||v0::read_all_to_block(std::io::Cursor::new(file))).await?;
let result=tokio::task::spawn_blocking(move||{
let block=v0::read_all_to_block(std::io::Cursor::new(file.as_slice())).map_err(RoundTripError::Decode)?;
let mut data=Vec::with_capacity(file.len()+1024);
v0::serialize(&block,&mut std::io::Cursor::new(&mut data)).map_err(RoundTripError::Encode)?;
let block_rt=v0::read_all_to_block(std::io::Cursor::new(data)).map_err(RoundTripError::RoundTripDecode)?;
if !(
block_rt.input_events.len()==block.input_events.len()&&
block_rt.output_events.len()==block.output_events.len()&&
block_rt.sound_events.len()==block.sound_events.len()&&
block_rt.world_events.len()==block.world_events.len()&&
block_rt.gravity_events.len()==block.gravity_events.len()&&
block_rt.run_events.len()==block.run_events.len()&&
block_rt.camera_events.len()==block.camera_events.len()&&
block_rt.setting_events.len()==block.setting_events.len()
){
return Err(RoundTripError::NotEqual);
}
Ok(block)
}).await?;
match result{
Err(err)=>Err(Error::BotFile{path,err}),
Ok(block)=>Ok((path,block)),