use crate::ais::armor::{extract_i32, extract_string, extract_u32};
use super::utils::{decode_latitude, decode_longitude};
#[derive(Debug, Clone, PartialEq)]
pub struct AidToNavigation {
pub mmsi: u32,
pub aid_type: u8,
pub name: String,
pub lat: Option<f64>,
pub lon: Option<f64>,
}
impl AidToNavigation {
pub(crate) fn decode(bits: &[u8]) -> Option<Self> {
if bits.len() < 272 {
return None;
}
let mmsi = extract_u32(bits, 8, 30)?;
let aid_type = extract_u32(bits, 38, 5)? as u8;
let name = extract_string(bits, 43, 20)?.trim().to_string();
let lon_raw = extract_i32(bits, 164, 28)?;
let lat_raw = extract_i32(bits, 192, 27)?;
Some(Self {
mmsi,
aid_type,
name,
lat: decode_latitude(lat_raw),
lon: decode_longitude(lon_raw),
})
}
}