roles_integrity/
utils.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use hdi::prelude::*;

pub fn serialize_tag<T>(payload: T) -> ExternResult<LinkTag>
where
    T: serde::Serialize + std::fmt::Debug,
    SerializedBytes: TryFrom<T, Error = SerializedBytesError>,
{
    let bytes = SerializedBytes::try_from(payload).map_err(|err| wasm_error!(err))?;

    Ok(LinkTag::from(bytes.bytes().clone()))
}

pub fn deserialize_tag<T>(tag: LinkTag) -> ExternResult<T>
where
    T: TryFrom<SerializedBytes, Error = SerializedBytesError>,
{
    let tag_bytes = SerializedBytes::from(UnsafeBytes::from(tag.0));

    let t =
        T::try_from(tag_bytes).map_err(|err| wasm_error!("Error deserializing tag: {err:?}."))?;
    Ok(t)
}