Skip to main content

wist_api/status/
mod.rs

1//! `agent/status` seam(edge seam B:gateway ↔ agentd)的报文。
2//!
3//! agentd 周期性上报自身状态,网关收下并落库。报文引用的**领域 / 数据面类型**
4//! (`HostProfile` / `AgentLocalWork` / `AgentUplinkState`)仍留在 `wist-contracts`;这里 re-export,
5//! 调用方从 `wist_api::status` 一处取齐。版本并存约定同 [`crate::enrollment`]
6//! (见 `wist-design/doc/design/foundation/api-seam-inventory.md` §7)。
7
8pub use wist_contracts::agent_uplink::AgentUplinkState;
9pub use wist_contracts::enrollment::HostProfile;
10pub use wist_contracts::local_work::AgentLocalWork;
11
12pub mod v1;
13pub use v1::*;
14
15/// 当前线上版本。新代码从这里取版本口径;并存期由路由/协商决定。
16pub const CURRENT: &str = v1::API_VERSION;
17
18#[cfg(test)]
19mod tests {
20    use super::*;
21
22    /// `CURRENT` 必须钉在 `v1`(与路由 `/api/v1/…` 一致),并与版本子模块同源。
23    #[test]
24    fn current_matches_the_live_wire_version() {
25        assert_eq!(CURRENT, "v1");
26        assert_eq!(CURRENT, v1::API_VERSION);
27    }
28
29    /// 编译期身份断言:本模块 re-export 的领域类型**就是** `wist-contracts` 的那几个
30    /// (若有人另抄一份,下面的函数体将类型不匹配而编译失败)。
31    #[test]
32    fn domain_types_are_the_contracts_ones() {
33        #[allow(dead_code)]
34        fn assert_identity() {
35            fn uplink_state(v: wist_contracts::agent_uplink::AgentUplinkState) -> AgentUplinkState {
36                v
37            }
38            fn host(v: wist_contracts::enrollment::HostProfile) -> HostProfile {
39                v
40            }
41            fn local_work(v: wist_contracts::local_work::AgentLocalWork) -> AgentLocalWork {
42                v
43            }
44            let _ = (uplink_state, host, local_work);
45        }
46        assert_identity();
47    }
48}