ferridriver_script/
result.rs1use crate::error::ScriptError;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize)]
7#[serde(rename_all = "lowercase")]
8pub enum ConsoleLevel {
9 Log,
10 Info,
11 Warn,
12 Error,
13 Debug,
14 System,
16}
17
18#[derive(Debug, Clone, serde::Serialize)]
20pub struct ConsoleEntry {
21 pub level: ConsoleLevel,
22 pub message: String,
23 pub ts_ms: u64,
25}
26
27#[derive(Debug, Clone, serde::Serialize)]
32pub struct ScriptSuccess {
33 pub value: serde_json::Value,
34}
35
36#[derive(Debug, Clone, serde::Serialize)]
41pub struct ScriptResult {
42 #[serde(flatten)]
43 pub outcome: Outcome,
44 pub duration_ms: u64,
45 pub console: Vec<ConsoleEntry>,
46}
47
48#[derive(Debug, Clone, serde::Serialize)]
50#[serde(tag = "status", rename_all = "snake_case")]
51pub enum Outcome {
52 Ok {
53 #[serde(flatten)]
54 success: ScriptSuccess,
55 },
56 Error {
57 error: ScriptError,
58 },
59}
60
61impl ScriptResult {
62 #[must_use]
63 pub fn ok(value: serde_json::Value, duration_ms: u64, console: Vec<ConsoleEntry>) -> Self {
64 Self {
65 outcome: Outcome::Ok {
66 success: ScriptSuccess { value },
67 },
68 duration_ms,
69 console,
70 }
71 }
72
73 #[must_use]
74 pub fn err(error: ScriptError, duration_ms: u64, console: Vec<ConsoleEntry>) -> Self {
75 Self {
76 outcome: Outcome::Error { error },
77 duration_ms,
78 console,
79 }
80 }
81
82 #[must_use]
83 pub fn is_ok(&self) -> bool {
84 matches!(self.outcome, Outcome::Ok { .. })
85 }
86
87 #[must_use]
88 pub fn is_err(&self) -> bool {
89 matches!(self.outcome, Outcome::Error { .. })
90 }
91}