20 releases

new 0.11.0 Oct 13, 2024
0.10.3 Aug 24, 2024
0.10.2 Jul 18, 2024
0.9.0 Aug 24, 2023
0.3.2 Mar 15, 2021

#721 in Parser implementations

Download history 111/week @ 2024-07-12 81/week @ 2024-07-19 6/week @ 2024-07-26 4/week @ 2024-08-16 173/week @ 2024-08-23 12/week @ 2024-08-30 18/week @ 2024-09-13 19/week @ 2024-09-20 35/week @ 2024-09-27 11/week @ 2024-10-04 466/week @ 2024-10-11

531 downloads per month
Used in 7 crates (3 directly)

LGPL-3.0

72KB
2K SLoC

Teehistorian parser

This is a Teehistorian parser, a data format for DDNet servers saving all input to reproduce it faithfully.

License

LGPL-3.0


lib.rs:

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