mod reader;
mod writer;
use std::{fmt::Display, io};
use csv::StringRecord;
use num_traits::AsPrimitive;
#[derive(Default)]
pub struct RowData {
data: StringRecord,
}
impl RowData {
#[inline]
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
#[inline]
pub fn len(&self) -> usize {
self.data.len()
}
#[inline]
pub fn size(&self) -> usize {
let items_size = self
.data
.iter()
.map(|item| item.len())
.sum::<usize>();
items_size + self.data.len()
}
#[inline]
pub fn get(&self, index: impl AsPrimitive<usize>) -> io::Result<&str> {
self.data.get(index.as_()).ok_or(io::Error::new(
io::ErrorKind::InvalidData,
format!("Invalid CSV column {}", index.as_()),
))
}
#[inline]
pub fn push<T>(&mut self, value: T)
where
T: Display,
{
self.data.push_field(&value.to_string());
}
}
pub use crate::file::csv::{
reader::{CsvReader, IntoIter, Iter, ReadRow},
writer::{CsvWriter, WriteRow},
};