CI / fmt (rustfmt --check) (push) Waiting to run
CI / clippy (ubuntu-latest) (push) Waiting to run
CI / clippy (windows-latest) (push) Waiting to run
CI / test (ubuntu-latest) (push) Waiting to run
CI / test (windows-latest) (push) Waiting to run
CI / build release (ubuntu-latest) (push) Waiting to run
CI / build release (windows-latest) (push) Waiting to run
CI / runtime smoke (ubuntu x64, xvfb) (push) Waiting to run
CI / runtime smoke (macos arm64, probe) (push) Skipped
CI / update-e2e (windows x64) (push) Waiting to run
GPU evidence / GPU 判据自测(不需 GPU;跳过 ≠ 已验证) (push) Waiting to run
GPU evidence / GPU 证据 — 探测可用产物与硬件适配器 (push) Waiting to run
Guards / core 零 UI 守门 (push) Waiting to run
Guards / presenter 零 UI 守门 (push) Waiting to run
Guards / design 零第三方依赖守门 (push) Waiting to run
Guards / unsafe 落点守门(集合必须恰好等于期望) (push) Waiting to run
Guards / 文件行数 ≤400 守门 (push) Waiting to run
Guards / 依赖许可与来源(cargo-deny) (push) Waiting to run
Release guard / 发布标记语义守门(push tag → 稳定版) (push) Waiting to run
Signing status(播报,不是门禁) / 判据自测(三行/退出码/变异重放/接线) (push) Waiting to run
Signing status(播报,不是门禁) / 签名就绪度(播报) (push) Waiting to run
Release / 选槽位(默认四个:Windows 两档 + Linux 两档) (push) Waiting to run
本批内容见 CHANGELOG.md 的 0.2.4 段。按 D41 用孤儿快照推 main,保留「公开史只有里程碑」的模型。
48 lines
1.8 KiB
Rust
48 lines
1.8 KiB
Rust
//! 整合包格式:探测结果与导出目标共用一个枚举。
|
||
//!
|
||
//! `slug()` 与 core 的格式 id **逐字一致**(`curseforge` / `modrinth` / `multimc`),
|
||
//! `from_slug` 是反向唯一入口——翻译发生在 `host::addon`,页面侧只认这两个函数。
|
||
|
||
use serde::{Deserialize, Serialize};
|
||
|
||
/// 整合包格式(探测结果与导出目标共用一个枚举)。
|
||
///
|
||
/// MultiMC / Prism 只**导入**不导出(core 的有意省略),所以导出侧两个入口是
|
||
/// [`Self::Modrinth`] / [`Self::Curseforge`]。
|
||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||
pub enum PackFormatView {
|
||
/// CurseForge:`manifest.json` + `overrides/`。
|
||
Curseforge,
|
||
/// Modrinth:`.mrpack`(`modrinth.index.json` + `overrides/`)。
|
||
Modrinth,
|
||
/// MultiMC / Prism:`mmc-pack.json` + `.minecraft/`(**只读**)。
|
||
Multimc,
|
||
}
|
||
|
||
impl PackFormatView {
|
||
/// 导出菜单里可选的两个(顺序 = 画出来的顺序)。
|
||
pub const EXPORTABLE: [PackFormatView; 2] =
|
||
[PackFormatView::Modrinth, PackFormatView::Curseforge];
|
||
|
||
/// 稳定 slug(与 core 的格式 id 逐字一致,**不要改名**)。
|
||
#[must_use]
|
||
pub const fn slug(self) -> &'static str {
|
||
match self {
|
||
Self::Curseforge => "curseforge",
|
||
Self::Modrinth => "modrinth",
|
||
Self::Multimc => "multimc",
|
||
}
|
||
}
|
||
|
||
/// 从 core 的格式 id 反解(`None` = 不认识的 id,调用方按「未知」处理,别猜)。
|
||
#[must_use]
|
||
pub fn from_slug(slug: &str) -> Option<Self> {
|
||
match slug {
|
||
"curseforge" => Some(Self::Curseforge),
|
||
"modrinth" => Some(Self::Modrinth),
|
||
"multimc" => Some(Self::Multimc),
|
||
_ => None,
|
||
}
|
||
}
|
||
}
|