holochain_types/dna/
coordinator_bundle.rs

1use 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/// A bundle of coordinator zomes.
11#[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    /// Convert into zomes and their wasm files.
47    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}