use crate::error::ScriptError;
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize)]
#[serde(rename_all = "lowercase")]
pub enum ConsoleLevel {
Log,
Info,
Warn,
Error,
Debug,
System,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct ConsoleEntry {
pub level: ConsoleLevel,
pub message: String,
pub ts_ms: u64,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct ScriptSuccess {
pub value: serde_json::Value,
}
#[derive(Debug, Clone, serde::Serialize)]
pub struct ScriptResult {
#[serde(flatten)]
pub outcome: Outcome,
pub duration_ms: u64,
pub console: Vec<ConsoleEntry>,
}
#[derive(Debug, Clone, serde::Serialize)]
#[serde(tag = "status", rename_all = "snake_case")]
pub enum Outcome {
Ok {
#[serde(flatten)]
success: ScriptSuccess,
},
Error {
error: ScriptError,
},
}
impl ScriptResult {
#[must_use]
pub fn ok(value: serde_json::Value, duration_ms: u64, console: Vec<ConsoleEntry>) -> Self {
Self {
outcome: Outcome::Ok {
success: ScriptSuccess { value },
},
duration_ms,
console,
}
}
#[must_use]
pub fn err(error: ScriptError, duration_ms: u64, console: Vec<ConsoleEntry>) -> Self {
Self {
outcome: Outcome::Error { error },
duration_ms,
console,
}
}
#[must_use]
pub fn is_ok(&self) -> bool {
matches!(self.outcome, Outcome::Ok { .. })
}
#[must_use]
pub fn is_err(&self) -> bool {
matches!(self.outcome, Outcome::Error { .. })
}
}