From ac2710620cc04a80a5434d1ddb05764b45aa4131 Mon Sep 17 00:00:00 2001 From: Michael Macias Date: Thu, 9 Jan 2025 12:46:48 -0600 Subject: [PATCH] cram/io/reader/header: Discard rest of header container This consumes the trailer of the first block, subsequent expansion blocks, and container padding. --- noodles-cram/src/async/io/reader/header.rs | 11 ++++++++--- noodles-cram/src/async/io/reader/header/container.rs | 4 ++++ noodles-cram/src/io/reader/header.rs | 11 ++++++++--- noodles-cram/src/io/reader/header/container.rs | 4 ++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/noodles-cram/src/async/io/reader/header.rs b/noodles-cram/src/async/io/reader/header.rs index a48bbe1a4..22a5ffca0 100644 --- a/noodles-cram/src/async/io/reader/header.rs +++ b/noodles-cram/src/async/io/reader/header.rs @@ -88,9 +88,14 @@ where { let mut container_reader = reader.container_reader().await?; - let mut raw_sam_header_reader = container_reader.raw_sam_header_reader().await?; - let header = read_sam_header(&mut raw_sam_header_reader).await?; - raw_sam_header_reader.discard_to_end().await?; + let header = { + let mut raw_sam_header_reader = container_reader.raw_sam_header_reader().await?; + let header = read_sam_header(&mut raw_sam_header_reader).await?; + raw_sam_header_reader.discard_to_end().await?; + header + }; + + container_reader.discard_to_end().await?; Ok(header) } diff --git a/noodles-cram/src/async/io/reader/header/container.rs b/noodles-cram/src/async/io/reader/header/container.rs index 3e792c2f6..2c2c436f1 100644 --- a/noodles-cram/src/async/io/reader/header/container.rs +++ b/noodles-cram/src/async/io/reader/header/container.rs @@ -32,4 +32,8 @@ where Ok(sam_header::Reader::new(reader, len)) } + + pub(super) async fn discard_to_end(&mut self) -> io::Result { + io::copy(&mut self.inner, &mut io::sink()).await + } } diff --git a/noodles-cram/src/io/reader/header.rs b/noodles-cram/src/io/reader/header.rs index 95647a1d7..c204d8d18 100644 --- a/noodles-cram/src/io/reader/header.rs +++ b/noodles-cram/src/io/reader/header.rs @@ -86,9 +86,14 @@ where { let mut container_reader = reader.container_reader()?; - let mut raw_sam_header_reader = container_reader.raw_sam_header_reader()?; - let header = read_sam_header(&mut raw_sam_header_reader)?; - raw_sam_header_reader.discard_to_end()?; + let header = { + let mut raw_sam_header_reader = container_reader.raw_sam_header_reader()?; + let header = read_sam_header(&mut raw_sam_header_reader)?; + raw_sam_header_reader.discard_to_end()?; + header + }; + + container_reader.discard_to_end()?; Ok(header) } diff --git a/noodles-cram/src/io/reader/header/container.rs b/noodles-cram/src/io/reader/header/container.rs index 939314697..c5434b91b 100644 --- a/noodles-cram/src/io/reader/header/container.rs +++ b/noodles-cram/src/io/reader/header/container.rs @@ -34,4 +34,8 @@ where Ok(sam_header::Reader::new(reader, len)) } + + pub(super) fn discard_to_end(&mut self) -> io::Result { + io::copy(&mut self.inner, &mut io::sink()) + } }