Skip to main content

eldiron_shared/
treasury.rs

1use 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}