use std::fs::File;
use std::io::Read;
use color_eyre::eyre::{Report, Result, eyre};
use log::debug;
use super::FirmwareStorage;
pub struct RawFirmwareFile
{
contents: Box<[u8]>,
}
impl TryFrom<File> for RawFirmwareFile
{
type Error = Report;
fn try_from(mut file: File) -> Result<Self>
{
debug!("Loading file as raw firmware binary");
let mut contents = Vec::new();
file.read_to_end(&mut contents)?;
if contents.len() > u32::MAX as usize {
Err(eyre!(
"Firmware file size exceeds the max value for a 32-bit integer! Firmware binary invalid (too big)"
))
} else {
Ok(Self {
contents: contents.into_boxed_slice(),
})
}
}
}
impl FirmwareStorage for RawFirmwareFile
{
fn load_address(&self) -> Option<u32>
{
None
}
fn firmware_data(&self) -> &[u8]
{
&self.contents
}
}