use std::future::Future;
use std::path::PathBuf;
use std::pin::Pin;
use relayburn_sdk::{ingest_opencode_sessions, IngestReport, RawIngestOptions, RawLedger};
use super::pending_stamp;
use super::HarnessAdapter;
use crate::util::home::home_dir;
fn opencode_sessions_dir() -> PathBuf {
home_dir()
.join(".local")
.join("share")
.join("opencode")
.join("storage")
.join("session")
}
fn opencode_ingest<'a>(
ledger: &'a mut RawLedger,
opts: &'a RawIngestOptions,
) -> Pin<Box<dyn Future<Output = anyhow::Result<IngestReport>> + Send + 'a>> {
Box::pin(ingest_opencode_sessions(ledger, opts))
}
pub fn adapter() -> &'static dyn HarnessAdapter {
pending_stamp::session_store_adapter("opencode", opencode_sessions_dir, opencode_ingest)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::harnesses::test_env::with_test_home;
#[test]
fn adapter_round_trip() {
let a: &'static dyn HarnessAdapter = adapter();
assert_eq!(a.name(), "opencode");
with_test_home("/tmp/burn-opencode-test-home", || {
assert_eq!(
a.session_root(),
PathBuf::from("/tmp/burn-opencode-test-home/.local/share/opencode/storage/session")
);
});
}
}