gltf_json/extensions/
root.rs1use gltf_derive::Validate;
2use serde_derive::{Deserialize, Serialize};
3#[cfg(feature = "extensions")]
4use serde_json::{Map, Value};
5
6#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
8pub struct Root {
9 #[cfg(feature = "KHR_lights_punctual")]
10 #[serde(
11 default,
12 rename = "KHR_lights_punctual",
13 skip_serializing_if = "Option::is_none"
14 )]
15 pub khr_lights_punctual: Option<KhrLightsPunctual>,
16
17 #[cfg(feature = "KHR_materials_variants")]
18 #[serde(
19 default,
20 rename = "KHR_materials_variants",
21 skip_serializing_if = "Option::is_none"
22 )]
23 pub khr_materials_variants: Option<KhrMaterialsVariants>,
24
25 #[cfg(feature = "extensions")]
26 #[serde(default, flatten)]
27 pub others: Map<String, Value>,
28}
29
30#[cfg(feature = "KHR_lights_punctual")]
31#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
32pub struct KhrLightsPunctual {
33 pub lights: Vec<crate::extensions::scene::khr_lights_punctual::Light>,
35}
36
37#[cfg(feature = "KHR_lights_punctual")]
38impl crate::root::Get<crate::extensions::scene::khr_lights_punctual::Light> for crate::Root {
39 fn get(
40 &self,
41 id: crate::Index<crate::extensions::scene::khr_lights_punctual::Light>,
42 ) -> Option<&crate::extensions::scene::khr_lights_punctual::Light> {
43 if let Some(extensions) = self.extensions.as_ref() {
44 if let Some(khr_lights_punctual) = extensions.khr_lights_punctual.as_ref() {
45 khr_lights_punctual.lights.get(id.value())
46 } else {
47 None
48 }
49 } else {
50 None
51 }
52 }
53}
54
55#[cfg(feature = "KHR_lights_punctual")]
56impl AsRef<[crate::extensions::scene::khr_lights_punctual::Light]> for crate::Root {
57 fn as_ref(&self) -> &[crate::extensions::scene::khr_lights_punctual::Light] {
58 self.extensions
59 .as_ref()
60 .and_then(|extensions| extensions.khr_lights_punctual.as_ref())
61 .map(|khr_lights_punctual| khr_lights_punctual.lights.as_slice())
62 .unwrap_or(&[])
63 }
64}
65#[cfg(feature = "KHR_lights_punctual")]
66impl AsMut<Vec<crate::extensions::scene::khr_lights_punctual::Light>> for crate::Root {
67 fn as_mut(&mut self) -> &mut Vec<crate::extensions::scene::khr_lights_punctual::Light> {
68 &mut self
69 .extensions
70 .get_or_insert_with(Default::default)
71 .khr_lights_punctual
72 .get_or_insert_with(Default::default)
73 .lights
74 }
75}
76
77#[cfg(feature = "KHR_materials_variants")]
78#[derive(Clone, Debug, Default, Deserialize, Serialize, Validate)]
79pub struct KhrMaterialsVariants {
80 pub variants: Vec<crate::extensions::scene::khr_materials_variants::Variant>,
81}
82
83#[cfg(feature = "KHR_materials_variants")]
84impl crate::root::Get<crate::extensions::scene::khr_materials_variants::Variant> for crate::Root {
85 fn get(
86 &self,
87 id: crate::Index<crate::extensions::scene::khr_materials_variants::Variant>,
88 ) -> Option<&crate::extensions::scene::khr_materials_variants::Variant> {
89 self.extensions
90 .as_ref()?
91 .khr_materials_variants
92 .as_ref()?
93 .variants
94 .get(id.value())
95 }
96}
97
98#[cfg(feature = "KHR_materials_variants")]
99impl AsRef<[crate::extensions::scene::khr_materials_variants::Variant]> for crate::Root {
100 fn as_ref(&self) -> &[crate::extensions::scene::khr_materials_variants::Variant] {
101 self.extensions
102 .as_ref()
103 .and_then(|extensions| extensions.khr_materials_variants.as_ref())
104 .map(|khr_materials_variants| khr_materials_variants.variants.as_slice())
105 .unwrap_or(&[])
106 }
107}
108#[cfg(feature = "KHR_materials_variants")]
109impl AsMut<Vec<crate::extensions::scene::khr_materials_variants::Variant>> for crate::Root {
110 fn as_mut(&mut self) -> &mut Vec<crate::extensions::scene::khr_materials_variants::Variant> {
111 &mut self
112 .extensions
113 .get_or_insert_with(Default::default)
114 .khr_materials_variants
115 .get_or_insert_with(Default::default)
116 .variants
117 }
118}