mcmeta_parser/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
use serde::{Serialize,Deserialize};
use std::collections::HashMap;
/// The root object.
#[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
pub struct Mcmeta {
    /// Holds the pack information.
    pub pack: McmetaPack,
    /// (optional) Section for selecting experimental features.
    pub features: McmetaFeatures,
    /// (optional) Section for filtering out files from packs applied below this one.
    pub filter: Option<McmetaFilter>,
    /// (optional) Section for specifying the overlays, which are sub-packs applied over the "normal" contents of a pack.
    pub overlays: Option<McmetaOverlays>,
    /// (optional) Only present in resource packs — Contains additional languages to add to the language menu.
    pub language: Option<HashMap<String,McmetaLanguage>>
}
        /// Holds the pack information.
        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
        pub struct McmetaPack {
            /// A raw JSON text that appears when hovering over the pack's name in the list given by the `/datapack list` command, or when viewing the pack in the Create World screen.
            pub description: Vec<McmetaPackDescription>,
            /// Determines the version(s) of Minecraft that this pack is compatible with.
            ///
            /// See <https://minecraft.wiki/w/Pack_format> for a full list of pack format numbers.
            pub pack_format: u8,
            /// (optional) Describes a range for pack formats that this pack supports.
            ///
            /// The range has to include the value of [`McmetaPack::pack_format`].
            pub supported_formats: Option<McmetaPackSupportedformats>
        }
                /// Determines the version(s) of Minecraft that this pack is compatible with.
                ///
                /// See <https://minecraft.wiki/w/Pack_format> for a full list of pack format numbers.
                #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
                pub struct McmetaPackDescription {
                    /// The text in the description.
                    pub text: String,
                    /// The colour of the text in the description.
                    pub color: Option<String>
                }
                /// (optional) Describes a range for pack formats that this pack supports.
                ///
                /// The range has to include the value of [`McmetaPack::pack_format`].
                #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
                pub struct McmetaPackSupportedformats {
                    /// Minimum Pack format number
                    pub min_inclusive: u8,
                    /// Maximum pack format number
                    pub max_inclusive: u8
                }

        // I don't what this looks like
        /// (optional) Section for selecting experimental features.
        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
        pub struct McmetaFeatures {
            /// List of enabled feature flags.
            ///
            /// Each item in the Vec is a location of a feature flag.
            pub enabled: Vec<String>
        }

        // I don't what this looks like
        /// (optional) Section for filtering out files from packs applied below this one.
        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
        pub struct McmetaFilter {
            /// Vector of patterns.
            ///
            /// Any file that matches one of the patterns inside [`McmetaFilter::block`] is treated as if it was not present in the pack at all.
            pub block: Vec<McmetaFilterBlock>
        }
                /// A pattern.
                ///
                /// Any file that matches one of the patterns inside here is treated as if it was not present in the pack at all.
                #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
                pub struct McmetaFilterBlock {
                    /// A regular expression for the namespace of files to be filtered out. If unspecified, it applies to every namespace.
                    pub namespace: String,
                    /// A regular expression for the paths of files to be filtered out. If unspecified, it applies to every file.
                    pub path: String
                }

        // I don't what this looks like
        /// (optional) Section for specifying the overlays, which are sub-packs applied over the "normal" contents of a pack.
        ///
        /// Their directories have their own assets and data directories, and are placed in the pack's root directory.
        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
        pub struct McmetaOverlays {
            /// Vector of overlays. The order is important, as the first in the list is applied first.
            pub entries: Vec<McmetaOverlaysEntries>
        }
                #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
                /// An overlay.
                pub struct McmetaOverlaysEntries {
                    /// Describes a range for pack formats when this overlay should be active.
                    pub formats: McmetaOverlaysEntriesFormats,
                    /// The directory to overlay for the respective versions (allowed characters: a-z, 0-9, _ and -). In this directory, pack.mcmeta and pack.png are ignored.
                    pub directory: String
                }
                        /// Describes a range for pack formats when this overlay should be active.
                        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
                        pub struct McmetaOverlaysEntriesFormats {
                            /// Minimum Pack format number.
                            pub min_inclusive: u8,
                            /// Maximum Pack format number.
                            pub max_inclusive: u8
                        }

        // I don't what this looks like
        /// (optional) Only present in resource packs — Contains additional languages to add to the language menu.
        #[derive(Serialize, Deserialize, Eq, PartialEq, Debug, Clone)]
        pub struct McmetaLanguage {
            /// The full name of the language
            pub name: String,
            /// The country or region name
            pub region: String,
            /// If true, the language reads right to left.
            pub bidirectional: bool
        }