use std::path::Path;
use crate::{Result, Session};
#[doc(hidden)]
pub fn load_native_store_family(path: &Path) -> Result<Option<Session>> {
let Some(name) = path.file_stem().and_then(|value| value.to_str()) else {
return Ok(None);
};
let Some(parent) = path.parent() else {
return Ok(None);
};
if !parent.join(format!("{name}.meta.json")).is_file() {
return Ok(None);
}
let sidecar = parent.join(format!("{name}.sidecar.jsonl"));
let mut session = if sidecar.is_file() {
Session::from_sidecar_str(&std::fs::read_to_string(sidecar)?)?
} else {
let text = std::fs::read_to_string(path)?;
let messages = text
.lines()
.filter(|line| !line.trim().is_empty())
.map(serde_json::from_str)
.collect::<std::result::Result<Vec<_>, _>>()?;
Session::from_native_messages(messages)
};
session.meta.session_id = Some(name.to_string());
Ok(Some(session))
}