conduit_cli/core/engine/workflow/addon/
validate.rs1use crate::{
2 core::domain::{addon::AddonType, loader::Loader},
3 core::engine::workflow::Workflow,
4 core::schemas::manifest::Manifest,
5 errors::{ConduitError, ConduitResult},
6};
7
8impl Workflow {
9 pub fn validate_compatibility(
10 &self,
11 target: &AddonType,
12 manifest: &Manifest,
13 ) -> ConduitResult<()> {
14 let loader = &manifest.project.loader;
15 let mc_version = &manifest.project.minecraft;
16
17 match (&target, loader) {
18 (AddonType::Mod, Loader::Vanilla | Loader::Paper | Loader::Purpur) => Err(
19 ConduitError::Deserialize(format!("Cannot install Mods on a {loader:?} server")),
20 ),
21 (AddonType::Plugin, l) if !matches!(l, Loader::Paper | Loader::Purpur) => Err(
22 ConduitError::Deserialize(format!("Plugins require Paper/Purpur (current: {l:?})")),
23 ),
24 (AddonType::Datapack, _) => {
25 let minor = mc_version
26 .split('.')
27 .nth(1)
28 .and_then(|v| v.parse::<u32>().ok())
29 .unwrap_or(0);
30 if minor < 13 {
31 return Err(ConduitError::Deserialize(
32 "Datapacks require MC 1.13+".to_string(),
33 ));
34 }
35 Ok(())
36 }
37 _ => Ok(()),
38 }
39 }
40}