Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
opticaldiscs
Format-agnostic optical disc image reading and filesystem browsing for Rust.
Provides a unified SectorReader abstraction that handles the cooked/raw sector
translation across three container formats — ISO, BIN/CUE, and CHD — with
filesystem browsers for ISO 9660, HFS, HFS+, and SGI EFS on top.
Status: Early development. See PLAN.md for the implementation roadmap.
CHD support
opticaldiscs-rs reads CHD optical images via libchdman-rs,
which wraps MAME's official chd_file core. This provides byte-for-byte
parity with the chdman tool — including subcode handling, audio
byte-swapping, and per-track frame semantics — at the cost of needing
to link MAME's C++ code.
By default, opticaldiscs-rs enables libchdman-rs's prebuilt feature,
which downloads a pre-built static archive matching the build target
from libchdman-rs's GitHub Releases instead of compiling MAME from
source. This keeps CI build times in seconds, not minutes.
When you might need to override prebuilt behavior
| Situation | Set env var |
|---|---|
| Target triple isn't covered by libchdman-rs's prebuilt matrix | LIBCHDMAN_PREBUILT_FALLBACK=1 |
| Local development without network access | LIBCHDMAN_FORCE_SOURCE=1 |
| Linux: pick a specific glibc floor for the prebuilt archive | LIBCHDMAN_GLIBC=2.31 (or 2.35, 2.39) |
See libchdman-rs's README for the full list of supported targets, glibc floors, and escape hatches.
Features
| Capability | Status |
|---|---|
| ISO sector reader | Phase 2 |
| BIN/CUE sector reader (raw 2352-byte) | Phase 3 |
| CHD sector reader | Phase 4 |
| TOC + MusicBrainz/FreeDB DiscID | Phase 5 (toc feature) |
| Disc format + filesystem auto-detection | Phase 6 |
| ISO 9660 filesystem browser | Phase 7 |
| HFS / HFS+ filesystem browser | Phase 8 |
| SGI Volume Header + EFS filesystem browser (IRIX CDs) | 0.3.0 |
| Physical optical drive enumeration | Phase 9 (drives feature) |
Quick Example
use DiscImageInfo;
use browse;
let info = open?;
println!;
println!;
let mut fs = open_disc_filesystem?;
let root = fs.root?;
for entry in fs.list_directory?
Cargo.toml
# git dependency while API stabilises
= { = "https://github.com/dani/opticaldiscs-rs" }
# with optional features
= { = "...", = ["toc", "drives"] }
Feature Flags
| Flag | Enables | Extra deps |
|---|---|---|
toc |
DiscTOC, MusicBrainz DiscID, FreeDB ID |
sha1, base64 |
drives |
list_drives() — enumerate physical optical drives |
— |
Used By
- rusty-backup — vintage disc backup/restore tool
- ODE-artwork-downloader — USBODE cover art downloader
License
GPL-3.0 — see LICENSE.