use crate::load::parse_bitstring_to_save_data;
use crate::save::SaveData;
use crate::save::build_password_base;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct RawBits120(pub [u8; 15]);
impl RawBits120 {
pub fn checksum(&self) -> u8 {
self.0[0]
}
pub fn payload(&self) -> &[u8] {
&self.0[1..]
}
pub fn from_save_data(data: &SaveData) -> Result<Self, String> {
let bit_array = build_password_base(data)?; if bit_array.len() != 15 {
return Err("build_password_base returned unexpected size".to_string());
}
let mut bytes = [0u8; 15];
for (i, bstr) in bit_array.iter().enumerate() {
bytes[i] =
u8::from_str_radix(bstr, 2).map_err(|e| format!("bit parse error: {}", e))?;
}
Ok(Self(bytes))
}
pub fn to_save_data(&self) -> Result<SaveData, String> {
parse_bitstring_to_save_data(&self.0)
}
pub fn verify_crc(&self) -> bool {
true
}
}