pub mod admin;
pub mod bootstrap;
pub mod cat;
pub mod diff;
pub mod docs;
pub mod find;
pub mod help;
pub mod hist;
pub mod links;
pub mod log;
pub mod ls;
pub mod mcp;
pub mod mutate;
pub mod node;
pub mod outline;
pub mod query;
pub mod retarget;
pub mod shell;
pub mod show;
pub mod source;
pub mod status;
pub mod sync;
pub mod version;
use serde_json::Value as Json;
use super::argv::Mode;
use super::context::Cli;
use super::output::{EXIT_OK, Result, js_json};
pub fn machine_out(
cli: &Cli,
doc: &Json,
items: Option<&[Json]>,
ids: Option<&[String]>,
) -> Option<Result<i32>> {
match cli.flags.mode {
Mode::Human => None,
Mode::Json => {
cli.io.out(&js_json(doc));
Some(Ok(EXIT_OK))
}
Mode::Jsonl => {
match items {
Some(items) => {
for it in items {
cli.io.out(&js_json(it));
}
}
None => cli.io.out(&js_json(doc)),
}
Some(Ok(EXIT_OK))
}
Mode::Ids => {
match ids {
Some(ids) => {
for id in ids {
cli.io.out(id);
}
}
None => cli.io.out(&js_json(doc)),
}
Some(Ok(EXIT_OK))
}
}
}
pub fn str_of(v: &Json, key: &str) -> String {
v.get(key)
.and_then(Json::as_str)
.map(str::to_owned)
.unwrap_or_default()
}
pub fn i64_of(v: &Json, key: &str) -> i64 {
v.get(key).and_then(Json::as_i64).unwrap_or(0)
}
pub fn fmt_value(v: &Json) -> String {
match v {
Json::String(s) => s.clone(),
other => js_json(other),
}
}