use std::fs::File;
use std::io::Result;
use crate::io::Header;
use crate::io::hdus::image::ImageData;
use crate::io::hdus::image::image::ImageParser;
const MANDATORY_KEYWORDS: [&str; 3] = [
"XTENSION",
"BITPIX",
"NAXIS",
];
pub struct ImageHDU{
pub header: Header,
pub data: ImageData,
}
impl ImageHDU {
pub fn new(header: Header, data: ImageData) -> Self {
Self {
header,
data,
}
}
pub fn read_from_file(f: &mut File) -> Result<Self> {
let mut header = Header::new();
header.read_from_file(f)?;
if !header.are_mandatory_keywords_first(&MANDATORY_KEYWORDS) {
panic!("Header corrupted");
}
let data: ImageData = ImageParser::read_from_buffer(f, &mut header)?;
Ok(Self::new(header, data))
}
pub fn write_to_file(&mut self, mut f: &mut File) -> Result<()> {
self.header.fix_header_w_mandatory_order(&MANDATORY_KEYWORDS);
ImageParser::write_image_header(&mut self.header, &self.data);
self.header.write_to_buffer(&mut f)?;
ImageParser::ndarray_to_buffer(&self.data, f)?;
Ok(())
}
}