1use gltf_v1_derive::Validate;
2use serde_derive::{Deserialize, Serialize};
3
4#[derive(Clone, Debug, Deserialize, Serialize, Validate)]
5pub struct AssetProfile {
6 #[serde(skip_serializing_if = "Option::is_none")]
7 pub api: Option<String>,
8 #[serde(skip_serializing_if = "Option::is_none")]
9 pub version: Option<String>,
10}
11
12#[derive(Clone, Debug, Deserialize, Serialize, Validate, Default)]
13pub struct Asset {
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub copyright: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub generator: Option<String>,
18 #[serde(rename = "premultipliedAlpha", skip_serializing_if = "Option::is_none")]
19 pub premultiplied_alpha: Option<bool>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub profile: Option<AssetProfile>,
22 pub version: String,
23}
24
25#[test]
26fn test_asset_deserialize() {
27 let data = r#"{
28 "copyright" : "(C) Copyright Khronos Group",
29 "generator" : "collada2gltf@042d7d2a3782aaf6d86961d052fc53bea8b3e424",
30 "premultipliedAlpha" : true,
31 "profile" : {
32 "api" : "WebGL",
33 "version" : "1.0.3",
34 "extras" : {
35 "Application specific" : "The extra object can contain any properties."
36 }
37 },
38 "version" : "1.0",
39 "extensions" : {
40 "extension_name" : {
41 "extension specific" : "value"
42 }
43 },
44 "extras" : {
45 "Application specific" : "The extra object can contain any properties."
46 }
47 }"#;
48 let asset: Result<Asset, _> = serde_json::from_str(data);
49 let asset_unwrap = asset.unwrap();
50 println!("{}", serde_json::to_string(&asset_unwrap).unwrap());
51 assert_eq!(
52 Some("(C) Copyright Khronos Group".to_string()),
53 asset_unwrap.copyright
54 );
55}