aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src-tauri/src/core/modpack/formats/mod.rs
blob: d7fbb503e07b76b523e8e3f81fbc02da97becece (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mod curseforge;
mod modrinth;
mod multimc;

use super::{archive::Archive, types::ParsedModpack};

type ParserFn = fn(&mut Archive) -> Result<ParsedModpack, String>;

const PARSERS: [ParserFn; 3] = [modrinth::parse, curseforge::parse, multimc::parse];

pub(crate) fn parse(archive: &mut Archive) -> Result<ParsedModpack, String> {
    PARSERS
        .iter()
        .find_map(|parser| parser(archive).ok())
        .ok_or_else(|| "unsupported modpack".to_string())
}