pub struct NodeInfo {Show 13 fields
pub id: String,
pub node_type: String,
pub name: String,
pub status: NodeStatus,
pub lat: f64,
pub lon: f64,
pub hae: Option<f64>,
pub readiness: f64,
pub capabilities: Vec<String>,
pub cell_id: Option<String>,
pub battery_percent: Option<i32>,
pub heart_rate: Option<i32>,
pub last_heartbeat: i64,
}Expand description
Node information for display
Fields§
§id: StringUnique node identifier
node_type: StringNode type (e.g., “UGV”, “UAV”, “Soldier System”)
name: StringNode name/callsign
status: NodeStatusNode status
lat: f64Node latitude (WGS84)
lon: f64Node longitude (WGS84)
hae: Option<f64>Height above ellipsoid (meters, optional)
readiness: f64Readiness level (0.0 - 1.0)
capabilities: Vec<String>List of capabilities
cell_id: Option<String>Cell membership (if any)
battery_percent: Option<i32>Battery / fuel percentage (0–100). Optional because not every
node has a measurable battery (fixed sensors, pre-lock
watches), and legacy publishes from pre-2026-05-08 hosts didn’t
carry the field. Wire key: battery_percent. See
[parse_battery_percent] for the clamp + None semantics.
heart_rate: Option<i32>Heart rate in BPM, sourced from wearable sensors (WearOS watch,
M5Stack health). Wire key: heart_rate. Required to surface a
vitals indicator on the operator card; absent on node types
that don’t carry a wearable. See [parse_heart_rate] for the
clamp + None semantics.
last_heartbeat: i64Last heartbeat timestamp (Unix millis). Defaults to 0 when
the publisher omits the field, surfaced to the UI as
“1970-01-01 stale” — different intent from battery_percent’s
None (“unknown sensor state”). Don’t fold this into the same
Option<T> shape: a missing heartbeat is a stale-record
signal, not absence-of-data, and the node-overlay code uses
the time delta directly without a None-check branch.
Trait Implementations§
Source§impl<UT> ConvertError<UT> for NodeInfo
impl<UT> ConvertError<UT> for NodeInfo
fn try_convert_unexpected_callback_error( e: UnexpectedUniFFICallbackError, ) -> Result<Self>
Source§impl<UT> FfiConverter<UT> for NodeInfo
impl<UT> FfiConverter<UT> for NodeInfo
Source§const TYPE_ID_META: MetadataBuffer
const TYPE_ID_META: MetadataBuffer
Source§type FfiType = RustBuffer
type FfiType = RustBuffer
Source§fn lower(v: Self) -> RustBuffer
fn lower(v: Self) -> RustBuffer
Source§fn try_lift(buf: RustBuffer) -> Result<Self>
fn try_lift(buf: RustBuffer) -> Result<Self>
Source§impl<UT> LiftReturn<UT> for NodeInfo
impl<UT> LiftReturn<UT> for NodeInfo
Source§fn try_lift_successful_return(v: Self::ReturnType) -> Result<Self>
fn try_lift_successful_return(v: Self::ReturnType) -> Result<Self>
Source§fn lift_foreign_return(
ffi_return: Self::ReturnType,
call_status: RustCallStatus,
) -> Self
fn lift_foreign_return( ffi_return: Self::ReturnType, call_status: RustCallStatus, ) -> Self
Source§fn lift_error(_buf: RustBuffer) -> Self
fn lift_error(_buf: RustBuffer) -> Self
Source§fn handle_callback_unexpected_error(e: UnexpectedUniFFICallbackError) -> Self
fn handle_callback_unexpected_error(e: UnexpectedUniFFICallbackError) -> Self
Source§impl<UT> LowerError<UT> for NodeInfo
impl<UT> LowerError<UT> for NodeInfo
Source§fn lower_error(obj: Self) -> RustBuffer
fn lower_error(obj: Self) -> RustBuffer
Source§impl<UT> LowerReturn<UT> for NodeInfo
impl<UT> LowerReturn<UT> for NodeInfo
Source§type ReturnType = <NodeInfo as Lower<UT>>::FfiType
type ReturnType = <NodeInfo as Lower<UT>>::FfiType
Source§fn lower_return(v: Self) -> Result<Self::ReturnType, RustCallError>
fn lower_return(v: Self) -> Result<Self::ReturnType, RustCallError>
Source§fn handle_failed_lift(
error: LiftArgsError,
) -> Result<Self::ReturnType, RustCallError>
fn handle_failed_lift( error: LiftArgsError, ) -> Result<Self::ReturnType, RustCallError>
Auto Trait Implementations§
impl Freeze for NodeInfo
impl RefUnwindSafe for NodeInfo
impl Send for NodeInfo
impl Sync for NodeInfo
impl Unpin for NodeInfo
impl UnsafeUnpin for NodeInfo
impl UnwindSafe for NodeInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, UT> HandleAlloc<UT> for T
impl<T, UT> HandleAlloc<UT> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more