1use alloc::borrow::Cow;
2use alloc::vec::Vec;
3use ownable::IntoOwned;
4use serde::Deserialize;
5
6use crate::camera::Camera;
7use crate::mesh::Mesh;
8use crate::skin::Skin;
9use crate::{Extensions, Extras, Idx};
10
11#[derive(Debug, Clone, Deserialize, IntoOwned)]
13pub struct Node<'a> {
14 #[serde(borrow)]
16 pub name: Option<Cow<'a, str>>,
17
18 #[serde(default)]
20 pub children: Vec<Idx<Node<'static>>>,
21
22 pub camera: Option<Idx<Camera<'static>>>,
24 pub mesh: Option<Idx<Mesh<'static>>>,
26 pub skin: Option<Idx<Skin<'static>>>,
28 pub weights: Option<Vec<f32>>,
30
31 pub matrix: Option<[f32; 16]>,
33 pub rotation: Option<[f32; 4]>,
35 pub scale: Option<[f32; 3]>,
37 pub translation: Option<[f32; 3]>,
39
40 #[serde(borrow)]
41 pub extensions: Option<Extensions<'a>>,
42 #[serde(borrow)]
43 pub extras: Option<Extras<'a>>,
44}