use crate::types::database::CanDatabase;
pub(crate) fn decode(db: &mut CanDatabase, line: &str) {
let line: &str = line.trim();
if !line.starts_with("BO_") {
return;
}
let after: &str = line.trim_start_matches("BO_").trim();
let mut split_once = after.splitn(2, char::is_whitespace);
let id_str: &str = split_once.next().unwrap_or("0");
let rest: &str = split_once.next().unwrap_or("").trim();
let id: u32 = id_str.parse::<u32>().unwrap_or(0);
let colon_pos: usize = match rest.find(':') {
Some(p) => p,
None => return,
};
let name: String = rest[..colon_pos].trim().trim_end_matches(':').to_string();
let mut it = rest[colon_pos + 1..].trim().split_ascii_whitespace();
let byte_length: u16 = it.next().and_then(|t| t.parse::<u16>().ok()).unwrap_or(0);
let sender_name: &str = it.next().unwrap_or("").trim_end_matches(';');
if let Ok(msg_key) = db.add_message(&name, id, byte_length) {
if let Some(node_key) = db.get_node_key_by_name(sender_name) {
let _ = db.add_sender_relation(msg_key, node_key);
}
}
}