14 releases (7 breaking)

new 0.10.0 Apr 18, 2024
0.9.0 Aug 24, 2023
0.8.3 Jun 15, 2023
0.8.2 Dec 24, 2022
0.3.2 Mar 15, 2021

#936 in Encoding

49 downloads per month
Used in tee-hee

LGPL-3.0

77KB
2K SLoC

teehistorian parser for DDNet

This crate provides a library for safe parsing of teehistorian files from the game DDNet. Goals of this library are:

  • performance
    • the header is retrievable without loading the whole file
    • the teehistorian file doesn't have to fit into memory
  • provide a C-API to eventually integrate it into DDNet for a teehistorian replayer

In the very center of this library is the Th struct to get the stream of Chunks of an teehistorian file

Examples

With the teehistorian file loaded directly into memory

use teehistorian::{Chunk, Th};
let input = b"\x69\x9d\xb1\x7b\x8e\xfb\x34\xff\xb1\xd8\xda\x6f\x60\xc1\x5d\xd1\
           {\"version\":\"2\"}\x00\
           \x40";
let mut th = Th::parse(&input[..]).unwrap();
assert_eq!(th.header().unwrap(), br#"{"version":"2"}"#);
assert_eq!(th.next_chunk().unwrap(), Chunk::Eos);
assert!(th.next_chunk().unwrap_err().is_eof());

When operating with files:

use teehistorian::{Chunk, ThBufReader, Th};
use std::fs::File;

let f = File::open("tests/minimal.teehistorian").unwrap();
let mut th = Th::parse(ThBufReader::new(f)).unwrap();
assert_eq!(th.header().unwrap(), br#"{"version":"2"}"#);
assert_eq!(th.next_chunk().unwrap(), Chunk::Eos);
assert!(th.next_chunk().unwrap_err().is_eof());

Dependencies

~1.5–2.3MB
~46K SLoC