bookdata/io/object/
transform.rs1use std::marker::PhantomData;
2
3use anyhow::Result;
4
5use super::ObjectWriter;
6
7pub struct MapWriter<F, T1, T2, W>
9where
10 W: ObjectWriter<T2>,
11 F: Fn(T1) -> Result<T2>,
12{
13 pub(crate) _phantom: PhantomData<(T1, T2)>,
14 pub(crate) transform: F,
15 pub(crate) writer: W,
16}
17
18impl<F, T1, T2, W> ObjectWriter<T1> for MapWriter<F, T1, T2, W>
19where
20 W: ObjectWriter<T2>,
21 F: Fn(T1) -> Result<T2>,
22{
23 fn write_object(&mut self, object: T1) -> Result<()> {
24 let mapped = (self.transform)(object)?;
25 self.writer.write_object(mapped)
26 }
27
28 fn finish(self) -> Result<usize> {
29 self.writer.finish()
30 }
31}