8 breaking releases
0.9.0 | Jul 28, 2024 |
---|---|
0.8.0 | Jul 23, 2023 |
0.7.0 | Jan 16, 2023 |
0.6.0 | Sep 1, 2022 |
0.1.0 | Dec 26, 2019 |
#420 in Parser implementations
86 downloads per month
Used in 2 crates
210KB
3.5K
SLoC
hltas
A crate for reading and writing Half-Life TAS scripts (.hltas
).
Examples
use hltas::{HLTAS, types::{JumpBug, Line, Times}};
let contents = "\
version 1
demo test
frames
------b---|------|------|0.001|-|-|5";
match HLTAS::from_str(&contents) {
Ok(hltas) => {
assert_eq!(hltas.properties.demo.as_deref(), Some("test"));
if let Line::FrameBulk(frame_bulk) = &hltas.lines[0] {
assert_eq!(
frame_bulk.auto_actions.jump_bug,
Some(JumpBug { times: Times::UnlimitedWithinFrameBulk })
);
assert_eq!(&frame_bulk.frame_time, "0.001");
assert_eq!(frame_bulk.frame_count.get(), 5);
} else {
unreachable!()
}
}
// The errors are pretty-printed with context.
Err(error) => println!("{}", error),
}
Features
-
serde1
: implements serde'sSerialize
andDeserialize
traits for all types. -
proptest1
: implements proptest'sArbitrary
trait for all types. Only "valid" contents are generated, as in, writing to string and parsing back will work and give you the same result.
C++ Wrapper
Also included is a C++ wrapper, exporting the same C++ interface as the previous C++ version of HLTAS.
Using the C++ wrapper from CMake
- You will need Rust: either from your distribution's packages, or from rustup.
- From your project's
CMakeLists.txt
, calladd_subdirectory("path/to/hltas")
. - Link to the
hltas-cpp
target:target_link_libraries(your-target hltas-cpp)
.
License: MIT/Apache-2.0
Dependencies
~0.9–1.8MB
~33K SLoC