use std::io;
use std::path::PathBuf;
pub fn find_sy_remote_binary() -> io::Result<PathBuf> {
if let Ok(exe_path) = std::env::current_exe()
&& let Some(parent) = exe_path.parent() {
let candidate = parent.join("sy-remote");
if candidate.exists() {
tracing::debug!("Found sy-remote at: {}", candidate.display());
return Ok(candidate);
}
}
let target_release = PathBuf::from("target/release/sy-remote");
if target_release.exists() {
tracing::debug!("Found sy-remote at: {}", target_release.display());
return Ok(target_release);
}
if let Ok(path_var) = std::env::var("PATH") {
for path_dir in std::env::split_paths(&path_var) {
let candidate = path_dir.join("sy-remote");
if candidate.exists() {
tracing::debug!("Found sy-remote in PATH: {}", candidate.display());
return Ok(candidate);
}
}
}
Err(io::Error::new(
io::ErrorKind::NotFound,
"Could not find sy-remote binary. Please ensure sy is properly installed.",
))
}
pub fn read_sy_remote_binary() -> io::Result<Vec<u8>> {
let binary_path = find_sy_remote_binary()?;
let data = std::fs::read(&binary_path)?;
tracing::debug!(
"Read sy-remote binary: {} bytes from {}",
data.len(),
binary_path.display()
);
Ok(data)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_find_sy_remote_binary() {
let result = find_sy_remote_binary();
match result {
Ok(path) => {
println!("Found sy-remote at: {}", path.display());
assert!(path.exists(), "Binary path should exist");
}
Err(e) => {
println!("Expected in dev/test environment: {}", e);
}
}
}
}