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}