holochain_types/dna/
coordinator_bundle.rs1use super::hash_bytes;
2use super::CoordinatorManifest;
3use crate::prelude::DnaResult;
4use crate::prelude::DnaWasm;
5use holochain_serialized_bytes::prelude::*;
6use holochain_zome_types::prelude::*;
7use mr_bundle::{Manifest, ResourceIdentifier};
8use std::collections::HashMap;
9
10#[derive(
12 Clone,
13 Debug,
14 PartialEq,
15 Eq,
16 serde::Serialize,
17 serde::Deserialize,
18 SerializedBytes,
19 shrinkwraprs::Shrinkwrap,
20 derive_more::From,
21)]
22pub struct CoordinatorBundle(mr_bundle::Bundle<CoordinatorManifest>);
23
24impl Manifest for CoordinatorManifest {
25 fn generate_resource_ids(&mut self) -> HashMap<ResourceIdentifier, String> {
26 self.zomes
27 .iter()
28 .map(|zome| (zome.resource_id(), zome.path.clone()))
29 .collect()
30 }
31
32 fn resource_ids(&self) -> Vec<ResourceIdentifier> {
33 self.zomes.iter().map(|zome| zome.resource_id()).collect()
34 }
35
36 fn file_name() -> &'static str {
37 "coordinators.yaml"
38 }
39
40 fn bundle_extension() -> &'static str {
41 "coordinators"
42 }
43}
44
45impl CoordinatorBundle {
46 pub async fn into_zomes(self) -> DnaResult<(CoordinatorZomes, Vec<DnaWasm>)> {
48 let mut resources = self.get_all_resources().clone();
49 let coordinator = hash_bytes(self.manifest().zomes.iter().cloned(), &mut resources).await?;
50 let coordinator_zomes = coordinator
51 .iter()
52 .map(|(zome_name, hash, _, dependencies)| {
53 let zome_def = ZomeDef::Wasm(WasmZome {
54 wasm_hash: hash.clone(),
55 dependencies: dependencies.clone(),
56 });
57 (zome_name.clone(), zome_def.into())
58 })
59 .collect();
60 let wasms = coordinator
61 .into_iter()
62 .map(|(_, _, wasm, _)| wasm)
63 .collect();
64
65 Ok((coordinator_zomes, wasms))
66 }
67}