Skip to main content

otf_pdf_syntax/
sink.rs

1//! Sequential byte output.
2
3use crate::source::SourceError;
4
5/// Where a saved document is written. Like [`crate::Source`], it keeps the
6/// core crates free of ambient I/O: the host decides whether bytes go to
7/// memory, a file or a socket.
8pub trait Sink {
9    /// Appends `bytes`.
10    fn write_all(&mut self, bytes: &[u8]) -> Result<(), SourceError>;
11}
12
13impl Sink for Vec<u8> {
14    fn write_all(&mut self, bytes: &[u8]) -> Result<(), SourceError> {
15        self.extend_from_slice(bytes);
16        Ok(())
17    }
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23
24    #[test]
25    fn vec_sink_appends() {
26        let mut v = b"a".to_vec();
27        v.write_all(b"bc").unwrap();
28        assert_eq!(v, b"abc");
29    }
30}