use serde_json::Value;
use super::routine_path;
pub(super) fn set_routine_enabled(routine: &str, enabled: bool, json: bool) -> i32 {
let body = serde_json::json!({ "enabled": enabled }).to_string();
match crate::cli::http_request_json("PATCH", &routine_path(routine), Some(&body)) {
Ok((status, resp)) if (200..300).contains(&status) => {
report_enabled(routine, enabled, &resp, json);
0
}
Ok((status, resp)) => report_http_error(status, &resp),
Err(_) => not_running(),
}
}
fn report_enabled(routine: &str, requested: bool, resp: &str, json: bool) {
let parsed = serde_json::from_str::<Value>(resp).ok();
let id = parsed
.as_ref()
.and_then(|value| value.get("id"))
.and_then(Value::as_str)
.unwrap_or(routine);
let state = parsed
.as_ref()
.and_then(|value| value.get("enabled"))
.and_then(Value::as_bool)
.unwrap_or(requested);
if json {
println!("{}", serde_json::json!({ "routine": id, "enabled": state }));
} else {
let word = if state { "enabled" } else { "disabled" };
println!("routine {id} is now {word}");
}
}
fn report_http_error(status: u16, resp: &str) -> i32 {
eprintln!("error: server returned HTTP {status}");
if !resp.is_empty() {
eprintln!("{resp}");
}
1
}
fn not_running() -> i32 {
eprintln!("moadim is not running");
crate::cli::EXIT_NOT_RUNNING
}