use crate::buffer::BufferAPI;
use crate::data::data_provider::DataProvider;
use std::fmt::Debug;
pub struct BufferAdapter<'a> {
buffer: &'a (dyn BufferAPI + Send + Sync),
}
impl<'a> BufferAdapter<'a> {
pub fn new(buffer: &'a (dyn BufferAPI + Send + Sync)) -> Self {
Self { buffer }
}
}
impl Debug for BufferAdapter<'_> {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("BufferAdapter").finish()
}
}
impl DataProvider for BufferAdapter<'_> {
fn get_row(&self, index: usize) -> Option<Vec<String>> {
if let Some(dataview) = self.buffer.get_dataview() {
if let Some(row) = dataview.get_row(index) {
return Some(
row.values
.iter()
.map(std::string::ToString::to_string)
.collect(),
);
}
}
if let Some(datatable) = self.buffer.get_datatable() {
if let Some(row) = datatable.get_row_as_strings(index) {
return Some(row);
}
}
None
}
fn get_column_names(&self) -> Vec<String> {
if let Some(dataview) = self.buffer.get_dataview() {
return dataview.column_names();
}
if let Some(datatable) = self.buffer.get_datatable() {
return datatable.column_names();
}
Vec::new()
}
fn get_row_count(&self) -> usize {
if let Some(dataview) = self.buffer.get_dataview() {
return dataview.row_count();
}
if let Some(datatable) = self.buffer.get_datatable() {
return datatable.row_count();
}
0
}
fn get_column_count(&self) -> usize {
if let Some(dataview) = self.buffer.get_dataview() {
return dataview.column_count();
}
if let Some(datatable) = self.buffer.get_datatable() {
return datatable.column_count();
}
0
}
}