use crate::{from_cbor, AnyBlockStorage, MultiCodec};
use cid::Cid;
use serde::Deserialize;
pub fn reducer_action_core(cbor: &[u8]) -> Result<String, anyhow::Error> {
let core_reducer_action: CoreReducerAction = from_cbor(cbor)?;
Ok(core_reducer_action.core)
}
pub async fn reducer_action_core_from_storage(
storage: &impl AnyBlockStorage,
reducer_action: Cid,
) -> Result<String, anyhow::Error> {
let block = storage.get(MultiCodec::with_cbor(&reducer_action)?).await?;
reducer_action_core(block.data())
}
#[derive(Debug, Deserialize)]
struct CoreReducerAction {
#[serde(rename = "c")]
core: String,
}
#[cfg(test)]
mod tests {
use super::CoreReducerAction;
use crate::{from_cbor, to_cbor, ReducerAction};
use cid::Cid;
#[test]
fn test_core_reducer_action() {
let reducer_action: ReducerAction<Option<Cid>> =
ReducerAction { core: "test-core".into(), from: "did:test".into(), payload: None, time: 1 };
let reducer_action_cbor = to_cbor(&reducer_action).unwrap();
let core_reducer_action: CoreReducerAction = from_cbor(&reducer_action_cbor).unwrap();
assert_eq!(core_reducer_action.core.as_str(), "test-core");
}
}