unity_hub/unity/hub/
module.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize, Serialize)]
4#[serde(rename_all = "camelCase")]
5pub struct Module {
6    #[serde(flatten)]
7    pub base: uvm_live_platform::Module,
8    #[serde(default)]
9    pub is_installed: bool,
10    #[serde(flatten)]
11    module_backwards_compatible: ModuleBackwardsCompatible,
12}
13
14impl Module {
15    pub fn id(&self) -> &str {
16        &self.base.id()
17    }
18}
19
20#[derive(Debug, Deserialize, Serialize)]
21#[serde(rename_all = "camelCase")]
22pub struct ModuleBackwardsCompatible {
23    #[serde(default)]
24    rename_from: String,
25    #[serde(default)]
26    rename_to: String,
27    #[serde(default)]
28    sync: String,
29    #[serde(default)]
30    parent: String,
31    #[serde(default)]
32    visible: bool,
33    #[serde(default)]
34    preselected: bool,
35    #[serde(default)]
36    eula_url_1: String,
37    #[serde(default)]
38    eula_label_1: String,
39    #[serde(default)]
40    eula_message: String,
41}
42
43impl From<&uvm_live_platform::Module> for ModuleBackwardsCompatible {
44    fn from(value: &uvm_live_platform::Module) -> Self {
45        let (rename_from, rename_to) = value
46            .extracted_path_rename().as_ref()
47            .map(|e| {
48                (
49                    e.from.to_path_buf().display().to_string(),
50                    e.to.to_path_buf().display().to_string(),
51                )
52            })
53            .unwrap_or(("".to_string(), "".to_string()));
54        let visible = !value.hidden();
55        let preselected = value.pre_selected();
56
57        let (eula_url_1, eula_label_1, eula_message) = value.eula().first().map(|eula| {
58            (eula.release_file.url.to_owned(), eula.label.to_owned(), eula.message.to_owned())
59        }).unwrap_or(("".to_string(), "".to_string(), "".to_string()));
60
61
62        Self {
63            rename_from,
64            rename_to,
65            visible,
66            preselected,
67            sync: "".to_string(),
68            parent: "".to_string(),
69            eula_url_1,
70            eula_label_1,
71            eula_message,
72        }
73    }
74}
75
76impl From<uvm_live_platform::Module> for Module {
77    fn from(mut value: uvm_live_platform::Module) -> Self {
78        value.download_size.as_bytes_representation();
79        value.installed_size.as_bytes_representation();
80        let module_backwards_compatible = ModuleBackwardsCompatible::from(&value);
81        Self {
82            base: value,
83            is_installed: false,
84            module_backwards_compatible
85        }
86    }
87}