Skip to main content

conduit_cli/core/engine/workflow/addon/
registration.rs

1use 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}