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
18pub 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}