diff --git a/src/encoder.rs b/src/encoder.rs index eded305..bd62bc2 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -354,12 +354,20 @@ impl Encoder { /// /// Returns an error if the segment number is invalid or data exceeds the allowed size pub fn add_app_segment(&mut self, segment_nr: u8, data: &[u8]) -> Result<(), EncodingError> { + self.add_app_segment_internal(segment_nr, data.to_vec()) + } + + fn add_app_segment_internal( + &mut self, + segment_nr: u8, + data: Vec, + ) -> Result<(), EncodingError> { if segment_nr == 0 || segment_nr > 15 { Err(EncodingError::InvalidAppSegment(segment_nr)) } else if data.len() > 65533 { Err(EncodingError::AppSegmentTooLarge(data.len())) } else { - self.app_segments.push((segment_nr, data.to_vec())); + self.app_segments.push((segment_nr, data)); Ok(()) } } @@ -385,16 +393,14 @@ impl Encoder { return Err(EncodingError::IccTooLarge(data.len())); } - let mut chunk_data = Vec::with_capacity(MAX_CHUNK_LENGTH); - for (i, data) in data.chunks(MAX_CHUNK_LENGTH).enumerate() { - chunk_data.clear(); + let mut chunk_data = Vec::with_capacity(MAX_CHUNK_LENGTH); chunk_data.extend_from_slice(MARKER); chunk_data.push(i as u8 + 1); chunk_data.push(num_chunks as u8); chunk_data.extend_from_slice(data); - self.add_app_segment(2, &chunk_data)?; + self.add_app_segment_internal(2, chunk_data)?; } Ok(())