use std::path::{Path, PathBuf};
pub fn base_url_path(mur_home: &Path) -> PathBuf {
mur_home.join("runtime").join("local_llm.url")
}
pub fn write_base_url(mur_home: &Path, url: &str) -> std::io::Result<()> {
let path = base_url_path(mur_home);
if let Some(parent) = path.parent() {
std::fs::create_dir_all(parent)?;
}
let tmp = path.with_extension("url.tmp");
std::fs::write(&tmp, url.as_bytes())?;
std::fs::rename(&tmp, &path)
}
pub fn read_base_url(mur_home: &Path) -> Option<String> {
let s = std::fs::read_to_string(base_url_path(mur_home)).ok()?;
let t = s.trim();
if t.is_empty() {
None
} else {
Some(t.to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
use tempfile::TempDir;
#[test]
fn write_then_read_roundtrips() {
let tmp = TempDir::new().unwrap();
assert_eq!(read_base_url(tmp.path()), None);
write_base_url(tmp.path(), "http://127.0.0.1:50321/v1").unwrap();
assert_eq!(
read_base_url(tmp.path()),
Some("http://127.0.0.1:50321/v1".to_string())
);
}
#[test]
fn blank_file_reads_as_none() {
let tmp = TempDir::new().unwrap();
write_base_url(tmp.path(), " \n").unwrap();
assert_eq!(read_base_url(tmp.path()), None);
}
}