use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "command", rename_all = "snake_case")]
pub enum Request {
Propagate {
object_ids: Option<Vec<String>>,
input_path: Option<String>,
epoch: f64,
force_model: String,
uncertainty_method: String,
out_dir: String,
format: String,
},
Ephemeris {
object_ids: Option<Vec<String>>,
input_path: Option<String>,
observers: Vec<String>,
epoch: f64,
force_model: String,
out_dir: String,
format: String,
},
Determine {
ades_path: String,
force_model: String,
max_iterations: u32,
out_dir: String,
format: String,
},
Ping,
Shutdown,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Response {
pub success: bool,
pub message: String,
pub error: Option<String>,
}
impl Response {
pub fn ok(message: impl Into<String>) -> Self {
Self {
success: true,
message: message.into(),
error: None,
}
}
pub fn err(message: impl Into<String>, error: impl Into<String>) -> Self {
Self {
success: false,
message: message.into(),
error: Some(error.into()),
}
}
}
pub fn default_socket_path() -> std::path::PathBuf {
dirs_socket_path().unwrap_or_else(|| std::path::PathBuf::from("/tmp/empyrean.sock"))
}
fn dirs_socket_path() -> Option<std::path::PathBuf> {
let home = std::env::var("HOME").ok()?;
Some(
std::path::PathBuf::from(home)
.join(".empyrean")
.join("empyrean.sock"),
)
}
pub fn default_pid_path() -> std::path::PathBuf {
let home = std::env::var("HOME").unwrap_or_else(|_| "/tmp".to_string());
std::path::PathBuf::from(home)
.join(".empyrean")
.join("empyrean.pid")
}