actrpc_core/action/
resolved_action_record.rs1use crate::{
2 action::{ActionKind, ActionSpec, ResolvedAction},
3 error::ProtocolError,
4};
5use serde::{Deserialize, Serialize};
6use serde_json::Value;
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
9pub struct ResolvedActionRecord {
10 pub kind: ActionKind,
11 #[serde(default, skip_serializing_if = "Option::is_none")]
12 pub params: Option<Value>,
13 pub result: Result<Option<Value>, ProtocolError>,
14}
15
16impl<A> TryFrom<ResolvedAction<A>> for ResolvedActionRecord
17where
18 A: ActionSpec,
19 A::Params: Serialize,
20 A::Result: Serialize,
21{
22 type Error = serde_json::Error;
23
24 fn try_from(value: ResolvedAction<A>) -> Result<Self, Self::Error> {
25 Ok(Self {
26 kind: A::action_kind(),
27 params: Some(serde_json::to_value(value.params)?),
28 result: match value.result {
29 Ok(ok) => Ok(Some(serde_json::to_value(ok)?)),
30 Err(err) => Err(err),
31 },
32 })
33 }
34}