1use parity_scale_codec::{Decode, Encode};
2use scale_info::prelude::vec::Vec;
3
4#[cfg(not(feature = "std"))]
5type String = Vec<u8>;
6
7#[cfg(feature = "std")]
8use serde::{Deserialize, Serialize};
9
10pub type ShardsTrait = [u8; 8];
12
13#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
14#[cfg_attr(
15 feature = "std",
16 derive(Serialize, Deserialize),
17 serde(rename_all = "camelCase")
18)]
19pub enum ShardsFormat {
20 Edn,
22 Binary,
24}
25
26#[derive(Encode, Decode, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
27#[cfg_attr(
28 feature = "std",
29 derive(Serialize, Deserialize),
30 serde(rename_all = "camelCase")
31)]
32pub struct ShardsScriptInfo {
33 pub format: ShardsFormat,
34 #[codec(compact)]
35 pub shards_version: u32,
36 pub requiring: Vec<ShardsTrait>,
37 pub implementing: Vec<ShardsTrait>,
38}
39
40#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
43#[cfg_attr(
44 feature = "std",
45 derive(Serialize, Deserialize),
46 serde(rename_all = "camelCase")
47)]
48pub enum AudioCategories {
49 OggFile,
51 Mp3File,
53}
54
55#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
56#[cfg_attr(
57 feature = "std",
58 derive(Serialize, Deserialize),
59 serde(rename_all = "camelCase")
60)]
61pub enum ModelCategories {
62 GltfFile,
64 Sdf,
66 PhysicsCollider,
68}
69
70#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
71#[cfg_attr(
72 feature = "std",
73 derive(Serialize, Deserialize),
74 serde(rename_all = "camelCase")
75)]
76pub enum TextureCategories {
77 PngFile,
78 JpgFile,
79}
80
81#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
82#[cfg_attr(
83 feature = "std",
84 derive(Serialize, Deserialize),
85 serde(rename_all = "camelCase")
86)]
87pub enum VectorCategories {
88 SvgFile,
90 TtfFile,
92 OtfFile,
94}
95
96#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
97#[cfg_attr(
98 feature = "std",
99 derive(Serialize, Deserialize),
100 serde(rename_all = "camelCase")
101)]
102pub enum VideoCategories {
103 MkvFile,
105 Mp4File,
107}
108
109#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
110#[cfg_attr(
111 feature = "std",
112 derive(Serialize, Deserialize),
113 serde(rename_all = "camelCase")
114)]
115pub enum TextCategories {
116 Plain,
118 Json,
120 Wgsl,
122 Markdown,
124}
125
126#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
127#[cfg_attr(
128 feature = "std",
129 derive(Serialize, Deserialize),
130 serde(rename_all = "camelCase")
131)]
132pub enum BinaryCategories {
133 WasmProgram,
135 WasmReactor,
137 BlendFile,
139 OnnxModel,
141 SafeTensors,
143 RareDomain,
145}
146
147#[derive(Encode, Decode, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
149#[cfg_attr(
150 feature = "std",
151 derive(Serialize, Deserialize),
152 serde(rename_all = "camelCase")
153)]
154pub enum Categories {
155 Text(TextCategories),
157 Trait(Option<ShardsTrait>),
160 Shards(ShardsScriptInfo),
163 Audio(AudioCategories),
165 Texture(TextureCategories),
167 Vector(VectorCategories),
169 Video(VideoCategories),
171 Model(ModelCategories),
173 Binary(BinaryCategories),
175 Bundle,
177}