feat: read external-file Virtual Datasets via a source resolver
VDS sources living in other files were previously unsupported because the pure-byte read API has no filesystem. Add a resolver seam and wire a default. clawhdf5-format: - Add VdsSourceResolver (Fn(&str) -> Option<Vec<u8>>) and read_raw_data_full_with_resolver. read_virtual_data uses the resolver to fetch an external source file's bytes by its stored name, then reads the named source dataset from those bytes and scatters as usual. A resolver returning None leaves the region at fill (HDF5's missing-source behavior); an external source with no resolver at all is a clean error. read_raw_data_full is unchanged (delegates with no resolver). clawhdf5: - File now records the directory it was opened from and, for virtual layouts, reads through a default resolver that loads sibling source files relative to that directory. So File::open(virt).dataset(d).read_*() transparently assembles cross-file VDS. In-memory files (from_bytes) have no directory, so only same-file VDS resolves there. Tests: format-layer external read with an injected resolver (and the no-resolver error path), plus facade tests that drop both files in a temp dir and read through File::open — covering successful resolution and the missing-source-is-fill case. Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Binary file not shown.
Reference in New Issue
Block a user