Split readers/writers into separate module
This commit is contained in:
53
src/io.rs
Normal file
53
src/io.rs
Normal file
@@ -0,0 +1,53 @@
|
||||
use std::{
|
||||
collections::HashMap,
|
||||
io::{Read, Write},
|
||||
};
|
||||
|
||||
use anyhow::bail;
|
||||
use csv::DeserializeRecordsIter;
|
||||
use rmp_serde::{Deserializer, Serializer};
|
||||
use serde::{de::DeserializeOwned, Serialize};
|
||||
|
||||
pub trait RecordSerializer {
|
||||
fn serialize(&mut self, record: impl Serialize) -> anyhow::Result<()>;
|
||||
}
|
||||
|
||||
impl<W: Write> RecordSerializer for csv::Writer<W> {
|
||||
fn serialize(&mut self, record: impl Serialize) -> anyhow::Result<()> {
|
||||
self.serialize(record)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl<W: Write> RecordSerializer for Serializer<W> {
|
||||
fn serialize(&mut self, record: impl Serialize) -> anyhow::Result<()> {
|
||||
record.serialize(self)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Want to be able to deserialise with serde over a reader like we currently do with the writer
|
||||
// pub trait RecordDeserializer<D: DeserializeOwned, I: Iterator<Item = Result<D, anyhow::Error>>> {
|
||||
// fn deserialize<I>(&mut self) -> I;
|
||||
// }
|
||||
|
||||
// impl<R: Read, D: DeserializeOwned, I: Iterator<Item = Result<D, anyhow::Error>>>
|
||||
// RecordDeserializer<D, I> for csv::Reader<R>
|
||||
// {
|
||||
// fn deserialize(&mut self) -> I {
|
||||
// self.deserialize().into_iter().map(|r| match r {
|
||||
// Ok(ok) => Ok(ok),
|
||||
// Err(err) => bail!(err),
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
|
||||
// impl<R: Read> RecordDeserializer for Deserializer<R> {
|
||||
// fn deserialize<I, D>(&mut self) -> I
|
||||
// where
|
||||
// D: DeserializeOwned,
|
||||
// I: Iterator<Item = D>,
|
||||
// {
|
||||
// todo!()
|
||||
// }
|
||||
// }
|
||||
Reference in New Issue
Block a user