1use crate::cmd::SyncCommandErrorContext;
2
3fn service(action: &str) -> anyhow::Result<()> {
5 let (program, args) = if cfg!(target_os = "macos") {
6 ("brew", vec!["services", action, "orch"])
7 } else {
8 let action = if action == "info" { "status" } else { action };
10 ("systemctl", vec!["--user", action, "orch"])
11 };
12
13 let status = std::process::Command::new(program)
14 .args(&args)
15 .status_with_context()?;
16
17 if !status.success() {
18 anyhow::bail!("{program} {} failed", args.join(" "));
19 }
20
21 Ok(())
22}
23
24pub fn start() -> anyhow::Result<()> {
26 service("start")
27}
28
29pub fn stop() -> anyhow::Result<()> {
31 service("stop")
32}
33
34pub fn restart() -> anyhow::Result<()> {
36 service("restart")
37}
38
39pub fn status() -> anyhow::Result<()> {
41 service("info")
42}