use serde_json::Value;
use crate::agent::admin_rpc::audit::{AdminAuditReader, AuditTailFilter};
use crate::agent::admin_rpc::dispatcher::{AdminRpcError, AdminRpcResult};
pub async fn tail(reader: &dyn AdminAuditReader, params: Value) -> AdminRpcResult {
let filter: AuditTailFilter = match serde_json::from_value(params) {
Ok(f) => f,
Err(e) => return AdminRpcResult::err(AdminRpcError::InvalidParams(e.to_string())),
};
let page = match reader.tail(&filter).await {
Ok(p) => p,
Err(e) => {
return AdminRpcResult::err(AdminRpcError::Internal(format!(
"audit_reader.tail: {e}"
)));
}
};
AdminRpcResult::ok(serde_json::to_value(page).unwrap_or(Value::Null))
}