conduit_cli/core/engine/workflow/addon/
registration.rs1use std::collections::HashMap;
2
3use uuid::Uuid;
4
5use crate::{
6 core::{
7 domain::{addon::AddonType, source::SourceType},
8 engine::{io::TomlFile, resolver::addon::ResolvedAddon, workflow::Workflow},
9 },
10 errors::ConduitResult,
11};
12
13impl Workflow {
14 pub async fn prepare_addon_id(
15 &self,
16 resolved_list: &[ResolvedAddon],
17 ) -> ConduitResult<HashMap<String, Uuid>> {
18 let mut id_map = HashMap::new();
19 let lockfile = self.ctx.lockfile.read().await;
20
21 for entry in lockfile.entries.values() {
22 if let SourceType::Modrinth { id, .. } = &entry.source.r#type {
23 id_map.insert(id.clone(), entry.metadata.id);
24 }
25 }
26
27 for resolved in resolved_list {
28 id_map
29 .entry(resolved.id.clone())
30 .or_insert_with(Uuid::new_v4);
31 }
32 Ok(id_map)
33 }
34
35 pub async fn update_manifest_addons(&self, primary: &ResolvedAddon) -> ConduitResult<()> {
36 let mut manifest = self.ctx.manifest.write().await;
37 let slug = primary.slug.clone();
38 let version = "*".to_string();
39
40 match primary.r#type {
41 AddonType::Mod => manifest.mods.insert(slug, version),
42 AddonType::Plugin => manifest.plugins.insert(slug, version),
43 AddonType::Datapack => manifest.datapacks.insert(slug, version),
44 };
45
46 manifest.save(self.ctx.paths.manifest()).await
47 }
48}