luft_core/contract/
mod.rs1pub mod backend;
6pub mod cache;
7pub mod event;
8pub mod finding;
9pub mod ids;
10pub mod schema;
11
12pub use backend::*;
14pub use cache::agent_cache_key;
16pub use event::*;
18pub use finding::*;
20pub use ids::*;
22pub use schema::*;
24
25#[cfg(test)]
26mod tests {
27 use super::*;
34
35 #[test]
36 fn reexports_are_accessible() {
37 let _: AgentCapabilities = AgentCapabilities::default();
39 let _: AgentStatus = AgentStatus::Ok;
40 let _: AgentTask;
41 let _: AgentResult;
42 let _: RunContext;
43 let _: BackendError = BackendError::Cancelled;
44 let _: ToolPolicy = ToolPolicy::default();
45 let _: McpEndpoint;
46 let _: Artifact;
47 let _: LogRef = LogRef::default();
48
49 let _: fn(&str, Option<&str>, &str, u32) -> String = agent_cache_key;
51
52 let _: EventSender;
54 let _: AgentEvent;
55 let _: RunStatus = RunStatus::Completed;
56 let _: LogLevel = LogLevel::Info;
57 let _: PlanPhase;
58 let _: ProgressDelta;
59
60 let _: Finding;
62 let _: Severity = Severity::Info;
63 let _: Location;
64
65 let _: RunId = uuid::Uuid::nil();
67 let _: AgentId = uuid::Uuid::nil();
68 let _: PhaseId = 0u32;
69 let _: TokenUsage = TokenUsage::default();
70
71 let _: fn(&serde_json::Value, &serde_json::Value) -> Result<(), SchemaError> =
73 validate_output;
74 }
75
76 #[test]
77 fn submodule_paths_resolve() {
78 fn _assert_trait(_: &dyn backend::AgentBackend) {}
81 let _: event::AgentEvent;
82 let _: finding::Finding;
83 let _: ids::TokenUsage;
84 let _: schema::SchemaError;
85 let _: fn(&str, Option<&str>, &str, u32) -> String = cache::agent_cache_key;
87 }
88
89 #[test]
90 fn backend_error_is_retryable_helper() {
91 assert!(BackendError::Timeout.is_retryable());
92 assert!(BackendError::Spawn("x".into()).is_retryable());
93 assert!(!BackendError::Cancelled.is_retryable());
94 assert!(!BackendError::Protocol("x".into()).is_retryable());
95 assert!(!BackendError::Config("x".into()).is_retryable());
96 }
97
98 #[test]
99 fn agent_status_as_str_is_consistent() {
100 assert_eq!(AgentStatus::Ok.as_str(), "ok");
103 assert_eq!(AgentStatus::TimedOut.as_str(), "timed_out");
104 }
105
106 #[test]
107 fn token_usage_default_is_zero() {
108 let t = TokenUsage::default();
109 assert_eq!(t.total(), 0);
110 }
111}