use pmpx_engine::{Event, ProgramKind};
use serde_json::{json, Value};
pub fn event(plugin: &str, event: &Event) -> Value {
match event {
Event::Resolved {
program,
path,
kind,
} => json!({
"event": "resolved",
"program": program.to_string_lossy(),
"path": path.as_ref().map(|p| p.to_string_lossy().into_owned()),
"kind": kind_name(*kind),
}),
Event::Starting { plan } => json!({
"event": "starting",
"program": plan.program.to_string_lossy(),
"args": plan
.args
.iter()
.map(|arg| arg.to_string_lossy().into_owned())
.collect::<Vec<_>>(),
"cwd": plan.cwd.as_ref().map(|d| d.to_string_lossy().into_owned()),
}),
Event::Finished { code } => json!({ "event": "finished", "code": code }),
Event::Warning(text) => json!({ "event": "warning", "text": text }),
Event::Note(text) => json!({ "event": "note", "text": text }),
Event::Error(text) => json!({ "event": "error", "text": text }),
Event::Phase {
name,
micros,
detail,
} => json!({
"event": "phase",
"name": name,
"micros": micros,
"detail": detail,
}),
Event::Notes { plugin, notes } => json!({
"event": "notes",
"plugin": plugin,
"notes": notes,
}),
Event::PluginMessage { level, text } => json!({
"event": "plugin",
"plugin": plugin,
"level": level,
"text": text,
}),
}
}
fn kind_name(kind: ProgramKind) -> &'static str {
match kind {
ProgramKind::Native => "native",
ProgramKind::CmdShim => "cmd",
ProgramKind::PowerShellShim => "powershell",
}
}