pub struct AsyncZipArchive<R: AsyncRead + AsyncSeek + Unpin> { /* private fields */ }Expand description
Async ZIP archive reader implementing AsyncArchiveReader.
This type wraps the async-zip crate’s ZipFileReader and provides async access to ZIP
archive entries without blocking the tokio runtime.
§Type Parameters
R- The underlying reader type, must implement:- [
AsyncRead]: For reading data - [
AsyncSeek]: For random access to ZIP entries Unpin: Required by tokio’s async traits
- [
Common types that satisfy these bounds:
tokio::fs::Filestd::io::Cursor<Vec<u8>>tokio::io::BufReader<File>
Implementations§
Source§impl<R: AsyncRead + AsyncSeek + Unpin> AsyncZipArchive<R>
impl<R: AsyncRead + AsyncSeek + Unpin> AsyncZipArchive<R>
Sourcepub async fn new(reader: R) -> Result<Self>
pub async fn new(reader: R) -> Result<Self>
Creates a new async ZIP archive reader.
§Arguments
reader- Any async reader implementingAsyncRead + AsyncSeek + Unpin
§Returns
An initialized AsyncZipArchive ready to read entries.
§Errors
Returns Lib3mfError::Io if:
- The ZIP file header cannot be read
- The ZIP central directory is corrupt or missing
- The file is not a valid ZIP archive
§Implementation Notes
- Wraps the reader in a
BufReaderfor efficient I/O - Uses
tokio_util::compatto bridge tokio and futures AsyncRead traits - Reads the ZIP central directory during construction
§Examples
use lib3mf_async::zip::AsyncZipArchive;
use tokio::fs::File;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let file = File::open("model.3mf").await?;
let archive = AsyncZipArchive::new(file).await?;
// Archive is ready to read entries
Ok(())
}Trait Implementations§
Source§impl<R: AsyncRead + AsyncSeek + Unpin + Send + Sync> AsyncArchiveReader for AsyncZipArchive<R>
impl<R: AsyncRead + AsyncSeek + Unpin + Send + Sync> AsyncArchiveReader for AsyncZipArchive<R>
Source§fn read_entry<'life0, 'life1, 'async_trait>(
&'life0 mut self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_entry<'life0, 'life1, 'async_trait>(
&'life0 mut self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads the content of an archive entry by name. Read more
Auto Trait Implementations§
impl<R> Freeze for AsyncZipArchive<R>where
R: Freeze,
impl<R> RefUnwindSafe for AsyncZipArchive<R>where
R: RefUnwindSafe,
impl<R> Send for AsyncZipArchive<R>where
R: Send,
impl<R> Sync for AsyncZipArchive<R>where
R: Sync,
impl<R> Unpin for AsyncZipArchive<R>
impl<R> UnwindSafe for AsyncZipArchive<R>where
R: UnwindSafe,
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more