Skip to main content

conduit_cli/core/schemas/
lock.rs

1use crate::core::domain::addon::Addon;
2use crate::core::domain::loader::Loader;
3use crate::core::domain::source::AddonSource;
4use serde::{Deserialize, Serialize};
5use std::collections::BTreeMap;
6
7#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
8pub enum HashKind {
9    Sha1,
10    Sha256,
11    Sha512,
12}
13
14#[derive(Debug, Serialize, Deserialize, Clone)]
15pub struct Lockfile {
16    pub version: u32,
17    pub instance: InstanceSnapshot,
18    pub entries: BTreeMap<String, LockedAddon>,
19}
20
21#[derive(Debug, Serialize, Deserialize, Clone)]
22pub struct InstanceSnapshot {
23    pub minecraft_version: String,
24    pub loader: Loader,
25    pub loader_hash: Option<String>,
26    pub hash_kind: Option<HashKind>,
27}
28
29#[derive(Debug, Serialize, Deserialize, Clone)]
30pub struct LockedAddon {
31    pub metadata: Addon,
32    pub source: AddonSource,
33}
34
35impl Default for Lockfile {
36    fn default() -> Self {
37        Self {
38            version: 1,
39            instance: InstanceSnapshot::default(),
40            entries: BTreeMap::new(),
41        }
42    }
43}
44
45impl Default for InstanceSnapshot {
46    fn default() -> Self {
47        Self {
48            minecraft_version: "1.21.11".to_string(),
49            loader: Loader::Vanilla,
50            loader_hash: None,
51            hash_kind: None,
52        }
53    }
54}