use crate::types::{Command, Error, Time};
#[derive(Debug, Clone, PartialEq, Default)]
pub struct GBS {
pub time: Time,
pub latitude: f64,
pub longitude: f64,
pub altitude: f64,
pub failed_satellite_id: usize,
pub probability_of_missed_detection: f64,
pub estimate_of_bias: f64,
pub standard_deviation_of_bias_estimate: f64,
}
impl Command<GBS> for GBS {
fn parse_command(&self, command: Vec<String>) -> Result<GBS, Error> {
let time_split: Vec<&str> = if command[0].contains('.') {
command[0].split('.').collect()
} else {
vec![&command[0], "0"]
};
let hour = time_split[0][..2].parse()?;
let minute = time_split[0][2..4].parse()?;
let second = time_split[0][4..6].parse()?;
let decimal_seconds = time_split[1].parse()?;
let time = Time {
hour,
minute,
second,
decimal_seconds,
};
let latitude = command[1].parse()?;
let longitude = command[2].parse()?;
let altitude = command[3].parse()?;
let failed_satellite_id = command[4].parse()?;
let probability_of_missed_detection = command[5].parse()?;
let estimate_of_bias = command[6].parse()?;
let standard_deviation_of_bias_estimate = command[7].parse()?;
Ok(GBS {
time,
latitude,
longitude,
altitude,
failed_satellite_id,
probability_of_missed_detection,
estimate_of_bias,
standard_deviation_of_bias_estimate,
})
}
}