eldiron_shared/
treasury.rs1use crate::prelude::*;
2use theframework::prelude::*;
3
4fn default_treasury_package_id() -> Uuid {
5 Uuid::new_v4()
6}
7
8#[derive(Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq)]
9pub struct TreasuryPackageMetadata {
10 #[serde(default)]
11 pub name: String,
12 #[serde(default)]
13 pub author: String,
14 #[serde(default)]
15 pub version: String,
16 #[serde(default)]
17 pub description: String,
18}
19
20#[derive(Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq)]
21pub struct TreasuryPackageManifest {
22 #[serde(default)]
23 pub name: String,
24 #[serde(default)]
25 pub author: String,
26 #[serde(default)]
27 pub version: String,
28 #[serde(default)]
29 pub description: String,
30 #[serde(default)]
31 pub kind: String,
32}
33
34impl TreasuryPackageManifest {
35 pub fn tile_collection(metadata: &TreasuryPackageMetadata) -> Self {
36 Self {
37 name: metadata.name.clone(),
38 author: metadata.author.clone(),
39 version: metadata.version.clone(),
40 description: metadata.description.clone(),
41 kind: "tile_collection".to_string(),
42 }
43 }
44}
45
46impl TreasuryPackageMetadata {
47 pub fn from_collection(collection: &TileCollectionAsset) -> Self {
48 Self {
49 name: collection.name.clone(),
50 author: collection.author.clone(),
51 version: collection.version.clone(),
52 description: collection.description.clone(),
53 }
54 }
55}
56
57#[derive(Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq)]
58pub struct TreasuryPackageSummary {
59 #[serde(default = "default_treasury_package_id")]
60 pub id: Uuid,
61 #[serde(default)]
62 pub slug: String,
63 #[serde(default)]
64 pub name: String,
65 #[serde(default)]
66 pub author: String,
67 #[serde(default)]
68 pub version: String,
69 #[serde(default)]
70 pub description: String,
71}
72
73impl TreasuryPackageSummary {
74 pub fn display_name(&self) -> String {
75 if self.name.is_empty() {
76 self.slug.clone()
77 } else {
78 self.name.clone()
79 }
80 }
81
82 pub fn metadata(&self) -> TreasuryPackageMetadata {
83 TreasuryPackageMetadata {
84 name: self.name.clone(),
85 author: self.author.clone(),
86 version: self.version.clone(),
87 description: self.description.clone(),
88 }
89 }
90}
91
92#[derive(Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq)]
93pub struct TreasuryIndexCategories {
94 #[serde(default)]
95 pub tiles: Vec<TreasuryPackageSummary>,
96}
97
98#[derive(Clone, Serialize, Deserialize, Default, Debug, PartialEq, Eq)]
99pub struct TreasuryIndex {
100 #[serde(default)]
101 pub tiles: Vec<TreasuryPackageSummary>,
102 #[serde(default)]
103 pub categories: TreasuryIndexCategories,
104}
105
106#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
107pub struct TreasuryTileCollectionPackage {
108 #[serde(default)]
109 pub metadata: TreasuryPackageMetadata,
110 pub collection: TileCollectionAsset,
111 #[serde(default)]
112 pub tiles: IndexMap<Uuid, rusterix::Tile>,
113 #[serde(default)]
114 pub tile_groups: IndexMap<Uuid, rusterix::TileGroup>,
115 #[serde(default)]
116 pub tile_node_groups: IndexMap<Uuid, NodeGroupAsset>,
117}