Skip to content

TM9657/tdms-rs

 
 

Repository files navigation

tdms-rs

Crates.io Documentation License

A pure Rust library for reading and writing National Instruments TDMS (Technical Data Management Streaming) files with high performance and zero-copy capabilities.

🚀 Key Features

  • ⚡ High Performance: Designed for high-throughput I/O. Achieves near-disk bandwidth by minimizing syscalls and using efficient buffer management.
  • 📦 Lazy Loading: Only loads data when requested. Metadata is indexed eagerly, while raw data is read on-demand to minimize memory footprint.
  • 🛡️ Type Safe: Strongly-typed channel access ensures data integrity at compile time.
  • 🔗 Pure Rust: No external C dependencies, making cross-compilation seamless.
  • 📊 Full Format Support: Supports all TDMS data types, hierarchical structures, and multi-segment files (Little-Endian).

📖 Documentation

🛠️ Quick Start

Reading

use tdms_rs::TdmsFile;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let file = TdmsFile::open("data.tdms")?;
    let group = file.group("Sensors").ok_or("Group not found")?;
    let channel = group.channel("Temperature").ok_or("Channel not found")?;

    let mut data = vec![0.0f64; channel.len()];
    channel.read(0..channel.len(), &mut data)?;

    println!("Read {} samples", data.len());
    Ok(())
}

Writing

use tdms_rs::TdmsWriter;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    {
        let mut writer = TdmsWriter::create("output.tdms")?;
        let mut group = writer.add_group("DAQ")?;
        let mut channel = group.add_channel::<f64>("Voltage")?;
        
        channel.write(&[1.0, 2.0, 3.0])?;
        // Optional: explicitly flush to ensure data is written
        writer.flush()?;
        // File is automatically flushed and closed when writer goes out of scope
    }
    Ok(())
}

📐 Philosophy & Guarantees

  1. Memory Efficiency: Never load data you don't ask for. Metadata is indexed; raw data is lazy-loaded.
  2. Safety First: Safe wrappers around unsafe memory operations.
  3. Modern MSRV: Supports the latest stable Rust features.

🤝 License

Licensed under either of Apache License 2.0 or MIT License at your option.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Rust 62.8%
  • Python 37.2%