use anyhow::Result;
use pasture_core::containers::{BorrowedMutBuffer, MakeBufferFromLayout, OwningBuffer};
use pasture_core::layout::PointLayout;
use pasture_core::meta::Metadata;
pub trait PointReader {
fn read_into<'a, 'b, B: BorrowedMutBuffer<'a>>(
&mut self,
point_buffer: &'b mut B,
count: usize,
) -> Result<usize>
where
'a: 'b;
fn read<'a, B: OwningBuffer<'a> + MakeBufferFromLayout<'a> + 'a>(
&mut self,
count: usize,
) -> Result<B> {
let mut buffer = B::new_from_layout(self.get_default_point_layout().clone());
buffer.resize(count);
let actual_count = self.read_into(&mut buffer, count)?;
buffer.resize(actual_count);
Ok(buffer)
}
fn get_metadata(&self) -> &dyn Metadata;
fn get_default_point_layout(&self) -> &PointLayout;
}