gltf_v1_json/
asset.rs

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}