use serde_json::Value;
#[allow(dead_code)]
pub(crate) fn parse_json_stdout(stdout: &[u8]) -> Value {
serde_json::from_slice(stdout).unwrap_or_else(|err| {
panic!(
"stdout should be valid json: {err}\n{}",
String::from_utf8_lossy(stdout)
)
})
}
#[allow(dead_code)]
pub(crate) fn first_json_row<'a>(payload: &'a Value, context: &str) -> &'a Value {
payload
.as_array()
.unwrap_or_else(|| panic!("{context} should render a JSON array"))
.first()
.unwrap_or_else(|| panic!("{context} should render at least one row"))
}
#[allow(dead_code)]
pub(crate) fn strip_ansi(text: &str) -> String {
let mut out = String::with_capacity(text.len());
let mut chars = text.chars().peekable();
while let Some(ch) = chars.next() {
if ch == '\u{1b}' && matches!(chars.peek(), Some('[')) {
let _ = chars.next();
for next in chars.by_ref() {
if ('@'..='~').contains(&next) {
break;
}
}
continue;
}
if ch != '\u{1b}' {
out.push(ch);
}
}
out
}