dnahub_types/
lib.rs

1mod holochain_types;
2mod dna_entry;
3
4pub use hdi_extensions;
5pub use hdi_extensions::hdi;
6pub use holochain_types::*;
7
8pub use dna_entry::*;
9
10use rmp_serde;
11use hdi::prelude::*;
12use hdi_extensions::{
13    guest_error,
14};
15use sha2::{ Digest, Sha256 };
16
17
18// TODO: this might be redundant because the zome name is already included in the integrity hash
19pub type IntegritiesToken = Vec<(String, Vec<u8>)>;
20pub type CoordinatorsToken = Vec<(String, Vec<u8>)>;
21
22
23
24#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq)]
25pub struct DnaToken {
26    pub integrity_hash: Vec<u8>,
27    pub integrities_token_hash: Vec<u8>,
28    pub coordinators_token_hash: Vec<u8>,
29}
30
31
32
33pub fn serialize<T>(target: &T) -> ExternResult<Vec<u8>>
34where
35    T: Serialize + ?Sized,
36{
37    rmp_serde::encode::to_vec( target )
38        .map_err( |err| guest_error!(format!(
39            "Failed to serialize target: {:?}", err
40        )) )
41}
42
43
44pub fn hash<T>(target: &T) -> ExternResult<Vec<u8>>
45where
46    T: Serialize + ?Sized,
47{
48    Ok(
49        Sha256::digest( &serialize( target )? ).to_vec()
50    )
51}