//! Streaming PEM writer. use super::Writer; use crate::Result; use pem_rfc7468::{Encoder, LineEnding}; /// `Writer` type which outputs PEM-encoded data. pub struct PemWriter<'w>(Encoder<'static, 'w>); impl<'w> PemWriter<'w> { /// Create a new PEM writer which outputs into the provided buffer. /// /// Uses the default 64-character line wrapping. pub fn new( type_label: &'static str, line_ending: LineEnding, out: &'w mut [u8], ) -> Result { Ok(Self(Encoder::new(type_label, line_ending, out)?)) } /// Get the PEM label which will be used in the encapsulation boundaries /// for this document. pub fn type_label(&self) -> &'static str { self.0.type_label() } /// Finish encoding PEM, writing the post-encapsulation boundary. /// /// On success, returns the total number of bytes written to the output buffer. pub fn finish(self) -> Result { Ok(self.0.finish()?) } } impl Writer for PemWriter<'_> { fn write(&mut self, slice: &[u8]) -> Result<()> { self.0.encode(slice)?; Ok(()) } }