1use crate::Record;
2use core::error::Error;
3use std::io::{self, Write};
4
5pub fn write_records<R: Record, E: Error + From<io::Error>>(
7 records: impl IntoIterator<Item = Result<R, E>>,
8 mut writer: impl Write,
9) -> Result<(), E> {
10 for record in records {
11 writeln!(writer, "{}", record?)?;
12 }
13
14 Ok(())
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20 use crate::{Error, ProcedureOperation, ProcedureRecord, Stack};
21 use indoc::indoc;
22 use pretty_assertions::assert_eq;
23
24 #[test]
25 fn write() {
26 let mut buffer = vec![];
27
28 write_records::<_, Error>(
29 [
30 Ok(ProcedureRecord::new(
31 ProcedureOperation::Call,
32 Stack::new(vec![Some("baz".into())]),
33 0,
34 )),
35 Ok(ProcedureRecord::new(
36 ProcedureOperation::Return,
37 Stack::new(vec![Some("foo".into()), Some("bar".into())]),
38 42,
39 )),
40 Ok(ProcedureRecord::new(
41 ProcedureOperation::ReturnCall,
42 Stack::new(vec![None; 3]),
43 2045,
44 )),
45 ],
46 &mut buffer,
47 )
48 .unwrap();
49
50 assert_eq!(
51 buffer,
52 indoc!(
53 b"
55 call\tbaz\t0
56 return\tfoo;bar\t42
57 return_call\t;;\t2045
58 "
59 )
60 );
61 }
62}