feat(mavlink): adopt the kaptan-native dialect
This commit is contained in:
1 parent
1c90870634
commit
5f91465e66
87 files changed
+7733
-6850
No files matched your search
@@ -3,6 +3,7 @@
|
||||
use std::{collections::VecDeque, time::SystemTime};
|
||||
|
||||
use kaptan_log::Level;
|
||||
use kaptan_mavlink::generated::kaptan::LogLevel;
|
||||
use serde::{Serialize, Serializer};
|
||||
|
||||
const MAX_LOG_ENTRIES: usize = 512;
|
||||
@@ -14,30 +15,23 @@ where
|
||||
serializer.serialize_str(level.as_str())
|
||||
}
|
||||
|
||||
/// Decodes the exact Kaptan log-level subset from its MAVLink representation.
|
||||
///
|
||||
/// Kaptan emits Error, Warn, Info, and Debug on the conventional MAVLink
|
||||
/// numbers 3, 4, 6, and 7. Trace is Debug plus the dedicated trace flag. The
|
||||
/// other MAVLink severity numbers are not Kaptan log levels.
|
||||
pub const fn level_from_wire(level: u8, trace: bool) -> Option<Level> {
|
||||
if trace && level != 7 {
|
||||
return None;
|
||||
}
|
||||
/// Decodes a wire event level, rejecting the filter-only Off value.
|
||||
pub const fn event_level_from_wire(level: LogLevel) -> Option<Level> {
|
||||
match level {
|
||||
3 => Some(Level::Error),
|
||||
4 => Some(Level::Warn),
|
||||
6 => Some(Level::Info),
|
||||
7 if trace => Some(Level::Trace),
|
||||
7 => Some(Level::Debug),
|
||||
_ => None,
|
||||
LogLevel::LOG_LEVEL_OFF => None,
|
||||
LogLevel::LOG_LEVEL_TRACE => Some(Level::Trace),
|
||||
LogLevel::LOG_LEVEL_DEBUG => Some(Level::Debug),
|
||||
LogLevel::LOG_LEVEL_INFO => Some(Level::Info),
|
||||
LogLevel::LOG_LEVEL_WARN => Some(Level::Warn),
|
||||
LogLevel::LOG_LEVEL_ERROR => Some(Level::Error),
|
||||
}
|
||||
}
|
||||
|
||||
/// Human-readable packet-view representation, including malformed values.
|
||||
pub fn wire_level_label(level: u8, trace: bool) -> String {
|
||||
match level_from_wire(level, trace) {
|
||||
Some(level) => level.as_str().into(),
|
||||
None => format!("UNKNOWN ({level})"),
|
||||
/// Human-readable packet-view representation.
|
||||
pub const fn wire_level_label(level: LogLevel) -> &'static str {
|
||||
match event_level_from_wire(level) {
|
||||
Some(level) => level.as_str(),
|
||||
None => "OFF",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,27 +188,19 @@ mod tests {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn wire_level_accepts_only_the_exact_kaptan_contract() {
|
||||
fn wire_level_accepts_only_event_values() {
|
||||
assert_eq!(event_level_from_wire(LogLevel::LOG_LEVEL_OFF), None);
|
||||
for (wire, expected) in [
|
||||
(0, None),
|
||||
(1, None),
|
||||
(2, None),
|
||||
(3, Some(Level::Error)),
|
||||
(4, Some(Level::Warn)),
|
||||
(5, None),
|
||||
(6, Some(Level::Info)),
|
||||
(7, Some(Level::Debug)),
|
||||
(8, None),
|
||||
(u8::MAX, None),
|
||||
(LogLevel::LOG_LEVEL_TRACE, Level::Trace),
|
||||
(LogLevel::LOG_LEVEL_DEBUG, Level::Debug),
|
||||
(LogLevel::LOG_LEVEL_INFO, Level::Info),
|
||||
(LogLevel::LOG_LEVEL_WARN, Level::Warn),
|
||||
(LogLevel::LOG_LEVEL_ERROR, Level::Error),
|
||||
] {
|
||||
assert_eq!(level_from_wire(wire, false), expected, "wire {wire}");
|
||||
assert_eq!(event_level_from_wire(wire), Some(expected));
|
||||
}
|
||||
assert_eq!(level_from_wire(7, true), Some(Level::Trace));
|
||||
for invalid_trace_level in [0, 1, 2, 3, 4, 5, 6, 8, u8::MAX] {
|
||||
assert_eq!(level_from_wire(invalid_trace_level, true), None);
|
||||
}
|
||||
assert_eq!(wire_level_label(2, false), "UNKNOWN (2)");
|
||||
assert_eq!(wire_level_label(9, false), "UNKNOWN (9)");
|
||||
assert_eq!(wire_level_label(LogLevel::LOG_LEVEL_TRACE), "TRACE");
|
||||
assert_eq!(wire_level_label(LogLevel::LOG_LEVEL_OFF), "OFF");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in new issue
Block a user