use crate::{common::split_altium_map, error::AddContext, sch::SchRecord, Error};
pub trait FromRecord {
const RECORD_ID: u32;
fn from_record<'a, I: Iterator<Item = (&'a [u8], &'a [u8])>>(
records: I,
) -> Result<SchRecord, Error>;
fn parse_if_matches(record_id: u32, buf: &[u8]) -> Option<Result<SchRecord, Error>> {
if record_id == Self::RECORD_ID {
let ret = Self::from_record(split_altium_map(buf))
.or_context(|| format!("with record id: {}", Self::RECORD_ID));
Some(ret)
} else {
None
}
}
}