use parity_scale_codec::{Decode, Encode};
use scale_info::prelude::vec::Vec;
#[cfg(not(feature = "std"))]
type String = Vec<u8>;
#[cfg(feature = "std")]
use serde::{Deserialize, Serialize};
pub type ShardsTrait = [u8; 8];
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum ShardsFormat {
Edn,
Binary,
}
#[derive(Encode, Decode, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub struct ShardsScriptInfo {
pub format: ShardsFormat,
#[codec(compact)]
pub shards_version: u32,
pub requiring: Vec<ShardsTrait>,
pub implementing: Vec<ShardsTrait>,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum AudioCategories {
OggFile,
Mp3File,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum ModelCategories {
GltfFile,
Sdf,
PhysicsCollider,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum TextureCategories {
PngFile,
JpgFile,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum VectorCategories {
SvgFile,
TtfFile,
OtfFile,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum VideoCategories {
MkvFile,
Mp4File,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum TextCategories {
Plain,
Json,
Wgsl,
Markdown,
}
#[derive(Encode, Decode, Copy, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum BinaryCategories {
WasmProgram,
WasmReactor,
BlendFile,
OnnxModel,
SafeTensors,
RareDomain,
}
#[derive(Encode, Decode, Clone, PartialEq, Debug, Eq, scale_info::TypeInfo)]
#[cfg_attr(
feature = "std",
derive(Serialize, Deserialize),
serde(rename_all = "camelCase")
)]
pub enum Categories {
Text(TextCategories),
Trait(Option<ShardsTrait>),
Shards(ShardsScriptInfo),
Audio(AudioCategories),
Texture(TextureCategories),
Vector(VectorCategories),
Video(VideoCategories),
Model(ModelCategories),
Binary(BinaryCategories),
Bundle,
}