Skip to main content

anyclaw_sdk_agent/
generic.rs

1use crate::adapter::AgentAdapter;
2
3/// Default passthrough [`AgentAdapter`] that forwards all ACP messages unchanged.
4///
5/// Use this when no message transformation is needed.
6#[derive(Debug, Default, Clone)]
7pub struct GenericAcpAdapter;
8
9impl AgentAdapter for GenericAcpAdapter {}
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14    use crate::{AgentAdapter, DynAgentAdapter};
15    use anyclaw_sdk_types::{ClientCapabilities, InitializeParams};
16    use rstest::rstest;
17
18    #[rstest]
19    #[test]
20    fn when_generic_adapter_default_constructed_then_it_can_be_cloned_and_debugged() {
21        let adapter = GenericAcpAdapter;
22        let cloned = adapter.clone();
23
24        assert_eq!(format!("{adapter:?}"), format!("{cloned:?}"));
25    }
26
27    #[rstest]
28    #[test]
29    fn when_generic_adapter_boxed_as_dyn_agent_adapter_then_dyn_dispatch_is_available() {
30        let _: Box<dyn DynAgentAdapter> = Box::new(GenericAcpAdapter);
31    }
32
33    #[rstest]
34    #[tokio::test]
35    async fn when_generic_adapter_on_initialize_params_called_from_own_module_then_passthrough() {
36        let adapter = GenericAcpAdapter;
37        let input = InitializeParams {
38            protocol_version: 1,
39            capabilities: ClientCapabilities { experimental: None },
40            options: None,
41            meta: None,
42        };
43
44        let output = AgentAdapter::on_initialize_params(&adapter, input.clone())
45            .await
46            .unwrap();
47
48        assert_eq!(output, input);
49    }
50}