bookdata/io/object/
mod.rs1use std::io::prelude::*;
2use std::mem::drop;
3
4use anyhow::Result;
5use csv;
6use serde::Serialize;
7
8mod chunks;
9mod thread;
10
11pub use chunks::{ChunkWriter, UnchunkWriter};
12pub use thread::ThreadObjectWriter;
13
14pub trait ObjectWriter<T>: Sized {
16 fn write_object(&mut self, object: T) -> Result<()>;
18
19 fn write_all_objects<I>(&mut self, objects: I) -> Result<usize>
21 where
22 I: Iterator<Item = T>,
23 {
24 let mut count = 0;
25 for obj in objects {
26 self.write_object(obj)?;
27 count += 1;
28 }
29 Ok(count)
30 }
31
32 fn finish_objects(self) -> Result<usize>;
34}
35
36impl<T, W> ObjectWriter<T> for &mut W
40where
41 W: ObjectWriter<T>,
42{
43 fn write_object(&mut self, object: T) -> Result<()> {
44 (**self).write_object(object)
45 }
46
47 fn finish_objects(self) -> Result<usize> {
48 Ok(0)
50 }
51}
52
53impl<T: Serialize, W: Write> ObjectWriter<T> for csv::Writer<W> {
54 fn write_object(&mut self, object: T) -> Result<()> {
55 self.serialize(object)?;
56 Ok(())
57 }
58
59 fn finish_objects(mut self) -> Result<usize> {
60 self.flush()?;
61 drop(self);
62 Ok(0)
63 }
64}