co_primitives/types/
action.rs1use crate::{Date, Did};
5use ipld_core::{
6 ipld::Ipld,
7 serde::{from_ipld, to_ipld},
8};
9use serde::{de::DeserializeOwned, Deserialize, Serialize};
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
12pub struct ReducerAction<T> {
13 #[serde(rename = "f")]
15 pub from: Did,
16
17 #[serde(rename = "t")]
21 pub time: Date,
22
23 #[serde(rename = "c")]
25 pub core: String,
26
27 #[serde(rename = "p")]
29 pub payload: T,
30}
31impl ReducerAction<Ipld> {
32 pub fn set_payload<T: Serialize>(&mut self, value: &T) -> Result<(), String> {
33 self.payload = to_ipld(value).map_err(|e| e.to_string())?;
34 Ok(())
35 }
36
37 pub fn get_payload<T: DeserializeOwned>(&self) -> Result<T, String> {
38 from_ipld(self.payload.clone()).map_err(|e| e.to_string())
39 }
40}