commit full of PRs

PRs full of commit

basically i used the ENTIRE mimo grant to convert a system to another. hope this one is good. may fail.
This commit is contained in:
lda
2026-05-03 00:48:11 +07:00 Verified
parent b5a28c801c
commit b850c218ec
112 changed files with 2407 additions and 4237 deletions
+3 -3
View File
@@ -1,12 +1,12 @@
[package]
name = "wakey-core"
version = "0.2.3"
version = "0.3.0"
edition = "2024"
publish = ["gitea"]
[dependencies]
macaddr = { version = "1", features = ["serde", "serde_std"] }
serde = { version = "1", features = ["derive"] }
macaddr = { workspace = true }
serde = { workspace = true }
serde_with = { version = "3", features = ["json"] }
strum = { version = "0", features = ["derive", "strum_macros"] }
thiserror = "2"
+27 -3
View File
@@ -7,7 +7,9 @@ use crate::model::{DhcpLease, NeighborEntry, NeighborState};
use crate::parse::mac;
/// Product-level presence derived from raw neighbor state.
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash, Serialize, serde::Deserialize, Default)]
#[derive(
Debug, PartialEq, Eq, Clone, Copy, Hash, Ord, PartialOrd, Serialize, serde::Deserialize, Default,
)]
#[serde(rename_all = "snake_case")]
pub enum Presence {
Online,
@@ -17,6 +19,28 @@ pub enum Presence {
Offline,
}
impl Presence {
pub fn as_str(&self) -> &'static str {
match self {
Presence::Online => "online",
Presence::LikelyOnline => "likely_online",
Presence::Unknown => "unknown",
Presence::Offline => "offline",
}
}
}
impl From<&str> for Presence {
fn from(s: &str) -> Self {
match s {
"online" => Presence::Online,
"likely_online" => Presence::LikelyOnline,
"offline" => Presence::Offline,
_ => Presence::Unknown,
}
}
}
impl From<NeighborState> for Presence {
fn from(value: NeighborState) -> Self {
match value {
@@ -50,7 +74,7 @@ pub enum DeviceId {
/// from hooks and live inventory so higher layers can explain why a device looks
/// online, stale, or unknown without reverse-engineering flattened fields.
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Hash, Serialize)]
#[derive(Debug, PartialEq, Eq, Clone, Hash, Serialize, Deserialize)]
pub struct DeviceObservationFact {
pub kind: String,
pub action: String,
@@ -67,7 +91,7 @@ pub struct DeviceObservationFact {
/// This aggregates facts from DHCP leases and neighbor-table rows into a more
/// useful application-level shape.
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Device {
pub id: Option<DeviceId>,
pub names: Vec<String>,
+2 -2
View File
@@ -7,7 +7,7 @@ use crate::model::NeighborState;
use crate::parse::mac;
/// One parsed DHCP lease row.
#[derive(Debug, Clone, Serialize)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DhcpLease {
pub expires_epoch: u64,
pub ip: IpAddr,
@@ -18,7 +18,7 @@ pub struct DhcpLease {
/// DHCP lease row plus optional current neighbor-state enrichment.
#[skip_serializing_none]
#[derive(Debug, Clone, Serialize)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DhcpLeaseWithState {
#[serde(flatten)]
pub lease_line: DhcpLease,
+1 -1
View File
@@ -8,7 +8,7 @@ use crate::parse::mac;
/// One neighbor-table row, typically derived from `ip neigh` or netlink.
#[skip_serializing_none]
#[derive(Debug, PartialEq, Eq, Clone, Hash, Serialize)]
#[derive(Debug, PartialEq, Eq, Clone, Hash, Serialize, Deserialize)]
pub struct NeighborEntry {
pub ip: IpAddr,
pub dev: Option<String>,