Skip to main content

Crate remata

Crate remata 

Source
Expand description

§Media Metadata Parser

A lightweight, dependency-free Rust library for extracting metadata from multiple audio and container formats.

§Supported Formats

This crate provides parsers for:

  • ID3 (v1 and v2) – MP3 metadata
  • RIFF INFO – WAV/AVI metadata
  • ASF – Windows Media formats (WMA/WMV)
  • Atom (MP4/M4A) – iTunes-style metadata
  • Vorbis Comments – FLAC and Ogg containers
  • AIFF – Audio Interchange File Format

Each format is parsed into a strongly-typed Rust structure with optional fields.

§Design Goals

  • ✅ Zero dependencies (standard library only)
  • ✅ Fast and minimal allocations
  • ✅ Unified, ergonomic API
  • ✅ Graceful handling of missing fields

§Quick Start

§Example: Parsing ID3 (MP3)

use std::fs;
use remata::Id3;
use remata::ParserError;

let data = fs::read("audio.mp3")?;

let meta: Result<Id3, ParserError> = Id3::parse(&data);
println!("{}", meta?);

§Example: Parsing RIFF (WAV)

use std::fs;
use remata::RiffMeta;
use remata::ParserError;

let data = fs::read("audio.wav")?;

let meta: Result<RiffMeta, ParserError> = RiffMeta::parse(&data);

if let Ok(meta) = meta {
    if let Some(title) = meta.title {
        println!("Title: {}", title);
    }
}

§Example: Parsing ASF (WMA/WMV)

use std::fs;
use remata::AsfMeta;
use remata::ParserError;

let data = fs::read("audio.wma")?;

let meta: Result<AsfMeta, ParserError> = AsfMeta::parse(&data);
println!("{}", meta?);

§Example: Parsing MP4 / M4A (Atom)

use std::fs;
use remata::AtomMeta;
use remata::ParserError;

let data = fs::read("audio.m4a")?;

let meta: Result<AtomMeta, ParserError> = AtomMeta::parse(&data);

if let Ok(meta) = meta {
    if let Some(artist) = meta.artist {
        println!("Artist: {}", artist);
    }
}

§Example: Parsing FLAC / Ogg (Vorbis Comments)

use std::fs;
use remata::Vob;
use remata::ParserError;

let data = fs::read("audio.flac")?;

let meta: Result<Vob, ParserError> = Vob::parse(&data);
println!("{}", meta?);

§Error Handling

All parsers now return the unified ParserError type. This error contains a human-readable message and can be propagated or logged.

use remata::{Vob, ParserError};

match Vob::parse(&[]) {
    Ok(meta) => println!("{}", meta),
    Err(err) => eprintln!("Error: {}", err.message),
}

§Notes

  • Not all metadata fields are guaranteed to be present.
  • Unknown or unsupported tags are safely ignored.
  • Binary data (e.g., cover art) is exposed as raw bytes.

§Re-exports

All metadata types are re-exported at the crate root for convenience.

Structs§

AiffMeta
AsfMeta
Represents parsed metadata from an ASF (Advanced Systems Format) file.
AtomMeta
Represents metadata extracted from MP4/M4A “atom”-based containers.
ParserError
RiffMeta
Represents metadata extracted from RIFF INFO chunks.
Vob
Represents metadata extracted from FLAC or Ogg/Vorbis containers.

Enums§

Id3
Represents either an ID3v1 or ID3v2 metadata block.