Optimize Download::and_visit_tar: Use trait object to avoid monomorphization (#644)

by removing method `TarEntriesVisitor::finish` and associated type
`TarEntriesVisitor::Target`.

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2023-01-04 11:11:10 +11:00 committed by GitHub
parent 1ab979cde8
commit 959b465d81
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 37 deletions

View file

@ -101,11 +101,11 @@ impl Download {
/// NOTE that this API does not support gnu extension sparse file unlike
/// [`Download::and_extract`].
#[instrument(skip(visitor))]
pub async fn and_visit_tar<V: TarEntriesVisitor + Debug + Send + 'static>(
pub async fn and_visit_tar(
self,
fmt: TarBasedFmt,
visitor: V,
) -> Result<V::Target, DownloadError> {
visitor: &mut dyn TarEntriesVisitor,
) -> Result<(), DownloadError> {
let stream = self
.client
.get_stream(self.url)
@ -114,11 +114,11 @@ impl Download {
debug!("Downloading and extracting then in-memory processing");
let ret = extract_tar_based_stream_and_visit(stream, fmt, visitor).await?;
extract_tar_based_stream_and_visit(stream, fmt, visitor).await?;
debug!("Download, extraction and in-memory procession OK");
Ok(ret)
Ok(())
}
/// Download a file from the provided URL and extract it to the provided path.