libtlg_rs/
lib.rs

1//! A Rust library for processing TLG files.
2#![cfg_attr(docsrs, feature(doc_cfg))]
3mod load_tlg;
4#[cfg(feature = "encode")]
5mod save_tlg;
6#[cfg(feature = "encode")]
7mod slide;
8mod stream;
9#[cfg(feature = "encode")]
10mod tlg5_saver;
11mod tvpgl;
12mod types;
13use std::io::{Read, Seek};
14
15pub use types::{Tlg, TlgColorType, TlgError};
16/// The result type for TLG operations.
17pub type Result<T> = std::result::Result<T, TlgError>;
18pub use load_tlg::load_tlg;
19#[cfg(feature = "encode")]
20#[cfg_attr(docsrs, doc(cfg(feature = "encode")))]
21pub use save_tlg::save_tlg;
22
23/// Check if it's a valid TLG.
24///
25/// 11 bytes are needed.
26pub fn is_valid_tlg(data: &[u8]) -> bool {
27    if data.len() < 11 {
28        return false;
29    }
30    data.starts_with(b"TLG0.0\x00sds\x1a")
31        || data.starts_with(b"TLG5.0\x00raw\x1a")
32        || data.starts_with(b"TLG6.0\x00raw\x1a")
33}
34
35/// Check if it's a valid TLG.
36///
37/// Same as [`is_valid_tlg`]
38pub fn check_tlg<T: Read + Seek>(mut data: T) -> Result<bool> {
39    let mut header = [0; 11];
40    data.rewind()?;
41    data.read_exact(&mut header)?;
42    Ok(is_valid_tlg(&header))
43}