use crate::core::context_capsule::AgentEnvelopeV1;
pub trait AgentGateway: Send + Sync {
fn relay_agent(&self, envelope: AgentEnvelopeV1) -> Result<AgentEnvelopeV1, AgentGatewayError>;
fn can_relay(&self, capsule_ref: &str, to_agent_id: &str) -> bool;
}
#[derive(Debug, thiserror::Error)]
pub enum AgentGatewayError {
#[error("relay rejected: {0}")]
Rejected(String),
#[error("invalid envelope: {0}")]
InvalidEnvelope(String),
#[error("bus emission failed: {0}")]
BusError(String),
}
#[cfg(test)]
mod tests {
use super::*;
fn _assert_object_safe(_: &dyn AgentGateway) {}
struct MockGateway;
impl AgentGateway for MockGateway {
fn relay_agent(
&self,
envelope: AgentEnvelopeV1,
) -> Result<AgentEnvelopeV1, AgentGatewayError> {
Ok(envelope)
}
fn can_relay(&self, _capsule_ref: &str, _to_agent_id: &str) -> bool {
true
}
}
#[test]
fn trait_is_object_safe() {
let gw = MockGateway;
let _dyn: &dyn AgentGateway = &gw;
}
}