use std::collections::HashMap;
pub mod field_types;
pub use field_types::{get_field_variant_as_string, FieldDataType, MesgNum};
pub mod messages;
pub use messages::VERSION;
#[derive(Clone, Debug)]
pub struct MessageInfo {
name: &'static str,
global_message_number: MesgNum,
fields: HashMap<u8, FieldInfo>,
}
impl MessageInfo {
pub fn name(&self) -> &'static str {
self.name
}
pub fn global_message_number(&self) -> MesgNum {
self.global_message_number
}
pub fn fields(&self) -> &HashMap<u8, FieldInfo> {
&self.fields
}
}
#[derive(Clone, Debug)]
pub struct FieldInfo {
name: &'static str,
field_type: FieldDataType,
def_number: u8,
scale: f64,
offset: f64,
units: &'static str,
accumulate: bool,
subfields: Vec<(u8, i64, FieldInfo)>,
components: Vec<ComponentFieldInfo>,
}
impl FieldInfo {
pub fn name(&self) -> &'static str {
self.name
}
pub fn field_type(&self) -> FieldDataType {
self.field_type
}
pub fn def_number(&self) -> u8 {
self.def_number
}
pub fn scale(&self) -> f64 {
self.scale
}
pub fn offset(&self) -> f64 {
self.offset
}
pub fn units(&self) -> &'static str {
self.units
}
pub fn accumulate(&self) -> bool {
self.accumulate
}
pub fn components(&self) -> &[ComponentFieldInfo] {
&self.components
}
pub fn subfields(&self) -> &[(u8, i64, FieldInfo)] {
&self.subfields
}
}
#[derive(Clone, Debug)]
pub struct ComponentFieldInfo {
dest_def_number: u8,
scale: f64,
offset: f64,
units: &'static str,
bits: u8,
accumulate: bool,
}
impl ComponentFieldInfo {
pub fn to_field_info(&self, info: &FieldInfo) -> FieldInfo {
FieldInfo {
name: info.name(),
field_type: info.field_type(),
def_number: info.def_number(),
scale: self.scale(),
offset: self.offset(),
units: self.units(),
accumulate: self.accumulate(),
subfields: info.subfields().to_vec(),
components: Vec::new(), }
}
pub fn dest_def_number(&self) -> u8 {
self.dest_def_number
}
pub fn scale(&self) -> f64 {
self.scale
}
pub fn offset(&self) -> f64 {
self.offset
}
pub fn units(&self) -> &'static str {
self.units
}
pub fn bits(&self) -> u8 {
self.bits
}
pub fn accumulate(&self) -> bool {
self.accumulate
}
}