libtlg_rs/
lib.rs

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