diff --git a/src/model/mod.rs b/src/model/mod.rs index afcf02d..8ba9985 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -55,15 +55,17 @@ pub struct Object { pub name: Option, #[serde(rename = "@pid", skip_serializing_if = "Option::is_none")] pub pid: Option, - #[serde(rename = "$value")] - pub object: ObjectData, + + #[serde(skip_serializing_if = "Option::is_none")] + pub mesh: Option, + + #[serde(skip_serializing_if = "Option::is_none")] + pub components: Option, } #[derive(Serialize, Deserialize)] -#[serde(rename_all = "lowercase")] -pub enum ObjectData { - Mesh(Mesh), - Components { component: Vec }, +pub struct Components { + pub component: Vec, } #[derive(Serialize, Deserialize)] @@ -114,7 +116,8 @@ impl From for Model { partnumber: None, name: None, pid: None, - object: ObjectData::Mesh(mesh), + mesh: Some(mesh), + components: None, }; let resources = Resources { object: vec![object], diff --git a/tests/model.rs b/tests/model.rs index 36e9fa6..86a7354 100644 --- a/tests/model.rs +++ b/tests/model.rs @@ -1,15 +1,42 @@ -use threemf::model::ObjectData; +use threemf::model::{Components, Object}; #[test] fn test_object() { - let object_str = r#""#; - let object_de: ObjectData = quick_xml::de::from_str(object_str).unwrap(); + let object_str = r##""##; + let object_de: Object = quick_xml::de::from_str(object_str).unwrap(); match object_de { - ObjectData::Mesh(_) => panic!("No mesh in this object"), - ObjectData::Components { component } => { + Object { mesh: Some(_), .. } => panic!("No mesh in this object"), + Object { + components: Some(Components { component }), + .. + } => { assert_eq!(component.len(), 3); let transform = component.first().unwrap().transform.unwrap(); assert_eq!(transform[0], 0.0393701); } + _ => panic!("There should be components"), } } + +#[test] +fn test_metadatagroup() { + let object_str = r##" + + + Body + + + + + + + + + + + + + "##; + let object_de: Object = quick_xml::de::from_str(object_str).unwrap(); + assert!(object_de.mesh.is_some()); +} diff --git a/tests/roundtrip.rs b/tests/roundtrip.rs index 4ed21b1..adb6b80 100644 --- a/tests/roundtrip.rs +++ b/tests/roundtrip.rs @@ -1,9 +1,6 @@ use model::{Triangle, Triangles, Vertex, Vertices}; use std::io::Cursor; -use threemf::{ - model::{self, ObjectData}, - Mesh, -}; +use threemf::{model, Mesh}; #[test] fn roundtrip() { @@ -47,7 +44,7 @@ fn roundtrip() { threemf::write(&mut buf, mesh).expect("Error writing mesh"); let models = threemf::read(&mut buf).expect("Error reading model"); - if let ObjectData::Mesh(read_mesh) = &models[0].resources.object[0].object { + if let Some(read_mesh) = &models[0].resources.object[0].mesh { assert!(read_mesh == &write_mesh); } }