pub fn parse_archive_listing(
body: &str,
) -> Result<Vec<PublishedObject>, DataCatalogError>Expand description
Parse the object entries out of an archive listing body.
Dialect detection is closed: the body must classify as exactly one of the
listing surfaces the catalog’s archives actually serve, each verified live
on 2026-08-04 and recorded as a fixture, and a body that fits none of them
is DataCatalogError::UnrecognizedArchiveListing - never a best-effort
empty result. An error page, a login interstitial, or a format change at
an archive must surface as “this is not a listing I understand”, because a
silent empty parse is indistinguishable from “nothing published” and would
convert an archive change into a false publication-gap report.
- Apache
<pre>autoindex and its older table flavor (GFZisdc-data.gfz.de, BKGigs.bkg.bund.de) and the ESA XHTML table autoindex (navigation-office.esa.int): recognized by the autoindexIndex ofmarker; objects are relative anchors, with the row’sYYYY-MM-DD HH:MMtext captured verbatim. - AIUB whole-tree CSV (
www.aiub.unibe.ch/download/full_listing.csv):path;bytes;ISO-8601;md5rows; every non-empty row must fit that grammar. - Anonymous-FTP
LISToutput (WHUigs.gnsswhu.cn): Unixls -lrows (an optional leadingtotalline allowed); every other non-empty row must fit that grammar.
Within a recognized dialect, rows that by the dialect’s own rules do not
name an object (parent links, sort links, directories, symlinks) are
skipped. The result preserves nothing but object paths and verbatim
modification text; interpretation belongs to
newest_published_product.