mod acp_adapter;
mod permission;
mod result_collector;
mod update_mapper;
pub use acp_adapter::{AcpAdapter, AcpConfig};
use luft_core::BackendRegistry;
use std::sync::Arc;
pub fn register_acp_backend(registry: &mut BackendRegistry, config: AcpConfig) {
registry.register(Arc::new(AcpAdapter::new(config)));
}
#[cfg(test)]
mod tests {
use super::*;
use luft_core::BackendRegistry;
#[test]
fn registers_backend_with_opencode_id() {
let mut registry = BackendRegistry::new();
register_acp_backend(&mut registry, AcpConfig::default());
let backend = registry.get("opencode").unwrap();
assert_eq!(backend.id(), "opencode");
}
#[test]
fn register_overwrites_existing() {
let mut registry = BackendRegistry::new();
let first = AcpConfig {
model: Some("first".to_string()),
..AcpConfig::default()
};
let second = AcpConfig {
model: Some("second".to_string()),
..AcpConfig::default()
};
register_acp_backend(&mut registry, first);
register_acp_backend(&mut registry, second);
let backend = registry.get("opencode").unwrap();
assert_eq!(backend.id(), "opencode");
let acp = backend
.as_any()
.downcast_ref::<AcpAdapter>()
.expect("registered backend is an AcpAdapter");
assert_eq!(acp.config().model.as_deref(), Some("second"));
}
#[test]
fn register_does_not_add_other_ids() {
let mut registry = BackendRegistry::new();
register_acp_backend(&mut registry, AcpConfig::default());
assert!(registry.get("other").is_err());
}
}