]> git.proxmox.com Git - proxmox-backup.git/commit
pbs-client: pxar: refactor body of `extract_archive` to `ExtractorIter`
authorMax Carrara <m.carrara@proxmox.com>
Mon, 17 Jul 2023 08:04:07 +0000 (10:04 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 17 Jul 2023 10:00:46 +0000 (12:00 +0200)
commitc66f2579d5587f6913d6d4a1458ea0f618bc4f87
tree75ed3b6a46754a28265934dbb9babcd43489497f
parent54ef4f157a5df2c2eb8b0c787991cb1bd1e095c8
pbs-client: pxar: refactor body of `extract_archive` to `ExtractorIter`

This change factors the body of `extract_archive()` into a separate
struct named `ExtractorIter` which implements the `Iterator` trait.

This refactor has two goals:
  * Make it easier to provide and propagate errors and additional
    information via `anyhow::Context`
  * Introduce a means to handle errors that occur during extraction,
    with the possibility to continue extraction if the handler decides
    that the error is not fatal

The latter point benefits from the information provided by the former;
previously, errors could only be handled in certain locations
(e.g. application of metadata), but not on a "per-entry" basis.

Since `extract_archive()` was already using a "desugared" version of
the iterator pattern to begin with, wrapping its body up in an actual
`Iterator` made the most sense, as it didn't require changing the already
existing control flow that much.

Signed-off-by: Max Carrara <m.carrara@proxmox.com>
pbs-client/src/pxar/extract.rs