runx_runtime/effects/
metadata.rs1use runx_contracts::{JsonObject, Reference};
2use serde::{Deserialize, Serialize};
3
4use super::RuntimeEffectError;
5
6pub const EFFECT_VERIFICATION_REFS_METADATA: &str = "runx_effect_verification_refs";
7
8#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(deny_unknown_fields)]
10struct EffectVerificationRefsMetadata {
11 refs: Vec<Reference>,
12}
13
14pub fn insert_effect_verification_ref(
15 metadata: &mut JsonObject,
16 reference: Reference,
17) -> Result<(), RuntimeEffectError> {
18 let mut refs = effect_verification_refs(metadata)?;
19 refs.push(reference);
20 let value = serde_json::to_value(EffectVerificationRefsMetadata { refs })
21 .and_then(serde_json::from_value)
22 .map_err(|source| RuntimeEffectError::InvalidMetadata {
23 family: "runtime".to_owned(),
24 message: source.to_string(),
25 })?;
26 metadata.insert(EFFECT_VERIFICATION_REFS_METADATA.to_owned(), value);
27 Ok(())
28}
29
30pub(crate) fn effect_verification_refs(
31 metadata: &JsonObject,
32) -> Result<Vec<Reference>, RuntimeEffectError> {
33 let Some(value) = metadata.get(EFFECT_VERIFICATION_REFS_METADATA) else {
34 return Ok(Vec::new());
35 };
36 let refs = serde_json::to_value(value)
37 .and_then(serde_json::from_value::<EffectVerificationRefsMetadata>)
38 .map_err(|source| RuntimeEffectError::InvalidMetadata {
39 family: "runtime".to_owned(),
40 message: source.to_string(),
41 })?;
42 Ok(refs.refs)
43}