From 49694cb21bb29b134d069ebde79cf6684505d2fb Mon Sep 17 00:00:00 2001 From: Alex van de Sandt Date: Tue, 2 Dec 2025 08:34:31 -0600 Subject: [PATCH] Add example to dump avilable vars --- Cargo.lock | 71 +++++++++++++++++++++++++++++++++ Cargo.toml | 4 ++ examples/list_available_vars.rs | 16 ++++++++ src/telemetry.rs | 4 +- 4 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 examples/list_available_vars.rs diff --git a/Cargo.lock b/Cargo.lock index 92850cd..4d47062 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -93,6 +93,27 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +[[package]] +name = "csv" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde_core", +] + +[[package]] +name = "csv-core" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" +dependencies = [ + "memchr", +] + [[package]] name = "encoding_rs" version = "0.8.35" @@ -183,9 +204,17 @@ dependencies = [ "aligned-vec", "bytemuck", "chrono", + "csv", "saphyr", + "serde", ] +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + [[package]] name = "js-sys" version = "0.3.83" @@ -208,6 +237,12 @@ version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + [[package]] name = "num-traits" version = "0.2.19" @@ -256,6 +291,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + [[package]] name = "saphyr" version = "0.0.6" @@ -279,6 +320,36 @@ dependencies = [ "hashlink", ] +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "shlex" version = "1.3.0" diff --git a/Cargo.toml b/Cargo.toml index 3e15115..660b684 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ aligned-vec = "0.6.4" bytemuck = { version = "1.24.0", features = ["derive"] } chrono = "0.4.42" saphyr = "0.0.6" +serde = { version = "1.0.228", features = ["derive"] } [lints.clippy] cloned_instead_of_copied = "warn" @@ -43,3 +44,6 @@ unused_self = "warn" used_underscore_binding = "warn" unwrap_used = "warn" +[dev-dependencies] +csv = "1.4.0" + diff --git a/examples/list_available_vars.rs b/examples/list_available_vars.rs new file mode 100644 index 0000000..77fbd90 --- /dev/null +++ b/examples/list_available_vars.rs @@ -0,0 +1,16 @@ +use csv::Writer; +use irsdk::IbtFile; + +fn main() { + let file_name = std::env::args() + .nth(1) + .expect("Usage: dump_file "); + let file = IbtFile::from_file(&file_name).expect("could not open IBT file"); + + let mut writer = Writer::from_writer(std::io::stdout()); + for var in &file.var_headers { + writer + .serialize(var) + .expect("could not serialize var header as csv"); + } +} diff --git a/src/telemetry.rs b/src/telemetry.rs index 9d7a385..55fcfbe 100644 --- a/src/telemetry.rs +++ b/src/telemetry.rs @@ -34,7 +34,7 @@ pub struct DiskSubHeader { pub lap_count: u32, } -#[derive(Clone, Copy, Debug)] +#[derive(Clone, Copy, Debug, serde::Serialize)] pub enum VarType { Char, Bool, @@ -44,7 +44,7 @@ pub enum VarType { Double, } -#[derive(Clone, Debug)] +#[derive(Clone, Debug, serde::Serialize)] pub struct VarHeader { pub ty: VarType, pub offset: usize, -- 2.51.2