use crate::bin_table::BinTable;
#[cfg(feature = "tokio")]
use crate::bin_table::OwnedRow;
use crate::hdu::HDU;
use crate::image::Image;
#[cfg(feature = "serde")]
use serde::Serialize;
#[cfg(feature = "serde")]
use serde::de::DeserializeOwned;
use std::error::Error;
use std::fmt;
pub trait BinTableHDU: HDU + fmt::Debug + Send + Sync {
fn table_data_bytes_len(&self) -> u64;
fn read_table(&self) -> Result<BinTable, Box<dyn Error + Send + Sync>>;
#[cfg(feature = "serde")]
fn read_rows<T: DeserializeOwned + Send + Sync>(
&self,
) -> Result<Vec<T>, Box<dyn Error + Send + Sync>>;
fn is_compressed_image(&self) -> bool {
self.header().is_compressed_image()
}
fn read_compressed_image(&self) -> Result<Option<Image>, Box<dyn Error + Send + Sync>> {
if !self.is_compressed_image() {
return Ok(None);
}
let table = self.read_table()?;
Ok(Some(crate::image::compression::read_image(
self.header(),
&table,
)?))
}
fn set_table(&mut self, table: &BinTable) -> Result<(), Box<dyn Error + Send + Sync>>;
#[cfg(feature = "serde")]
fn set_rows<T: Serialize>(&mut self, rows: &T) -> Result<(), Box<dyn Error + Send + Sync>> {
self.set_table(&crate::bin_table::to_bin_table(rows)?)
}
#[cfg(feature = "tokio")]
fn stream_table_rows_raw(
&self,
) -> Result<futures::stream::BoxStream<'_, OwnedRow>, Box<dyn Error + Send + Sync>>;
#[cfg(feature = "serde")]
#[cfg(feature = "tokio")]
fn stream_table_rows<T: DeserializeOwned + Send + Sync>(
&self,
) -> Result<futures::stream::BoxStream<'_, crate::Result<T>>, Box<dyn Error + Send + Sync>>;
}