diff --git a/sdformat_rs/Cargo.lock b/sdformat_rs/Cargo.lock index de93f49..c8f4b1a 100644 --- a/sdformat_rs/Cargo.lock +++ b/sdformat_rs/Cargo.lock @@ -1,6 +1,6 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "approx" @@ -13,21 +13,15 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "5c76a5792e44e4abe34d3abf15636779261d45a7450612059293d1d2cfc63422" [[package]] name = "convert_case" @@ -40,36 +34,31 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "log" -version = "0.4.17" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "matrixmultiply" -version = "0.3.2" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08" dependencies = [ + "autocfg", "rawpointer", ] [[package]] name = "nalgebra" -version = "0.32.3" +version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4" dependencies = [ "approx", "matrixmultiply", @@ -83,9 +72,9 @@ dependencies = [ [[package]] name = "nalgebra-macros" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc" dependencies = [ "proc-macro2", "quote", @@ -94,63 +83,61 @@ dependencies = [ [[package]] name = "num-complex" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ "num-traits", ] [[package]] name = "num-integer" -version = "0.1.45" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg", "num-traits", ] [[package]] name = "num-rational" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "autocfg", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] [[package]] name = "paste" -version = "1.0.12" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] @@ -163,9 +150,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "safe_arch" -version = "0.6.0" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323" dependencies = [ "bytemuck", ] @@ -176,9 +163,41 @@ version = "0.1.0" dependencies = [ "convert_case", "nalgebra", + "xml-rs", "xmltree", "yaserde", - "yaserde_derive", +] + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_tokenstream" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64060d864397305347a78851c51588fd283767e7e7589829e8121d65512340f1" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn", ] [[package]] @@ -196,9 +215,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.109" +version = "2.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" dependencies = [ "proc-macro2", "quote", @@ -207,27 +226,27 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "wide" -version = "0.7.8" +version = "0.7.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +checksum = "0ce5da8ecb62bcd8ec8b7ea19f69a51275e91299be594ea5cc6ef7819e16cd03" dependencies = [ "bytemuck", "safe_arch", @@ -235,9 +254,9 @@ dependencies = [ [[package]] name = "xml-rs" -version = "0.8.4" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] name = "xmltree" @@ -250,24 +269,27 @@ dependencies = [ [[package]] name = "yaserde" -version = "0.7.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2776ec5bb20e76d89268e87e1ea66c078b94f55e9771e4d648adda3019f87fc" +checksum = "8bfa0d2b420fd005aa9b6f99f9584ebd964e6865d7ca787304cc1a3366c39231" dependencies = [ "log", "xml-rs", + "yaserde_derive", ] [[package]] name = "yaserde_derive" -version = "0.7.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0b0a4701f203ebaecce4971a6bb8575aa07b617bdc39ddfc6ffeff3a38530d" +checksum = "1f785831c0e09e0f1a83f917054fd59c088f6561db5b2a42c1c3e1687329325f" dependencies = [ "heck", "log", "proc-macro2", "quote", + "serde", + "serde_tokenstream", "syn", "xml-rs", ] diff --git a/sdformat_rs/Cargo.toml b/sdformat_rs/Cargo.toml index d082cde..3990c80 100644 --- a/sdformat_rs/Cargo.toml +++ b/sdformat_rs/Cargo.toml @@ -6,8 +6,9 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -yaserde={version = "0.7.0"} -yaserde_derive="0.7.0" +yaserde={version = "0.12.0", features = ["derive"]} +# Same as yaserde that doesn't re-export it +xml-rs = "0.8.3" nalgebra = "0.32.2" [build-dependencies] diff --git a/sdformat_rs/build.rs b/sdformat_rs/build.rs index ec5e121..1c9f221 100644 --- a/sdformat_rs/build.rs +++ b/sdformat_rs/build.rs @@ -63,11 +63,14 @@ impl RequiredStatus { fn sanitize_field(fieldname: &str) -> String { let hashset = HashSet::from(["loop", "static", "type", "box"]); - if hashset.contains(fieldname) { + let fieldname = if hashset.contains(fieldname) { format!("r#{}", fieldname) } else { fieldname.to_string() - } + }; + + // Replace semicolon for experimental params + fieldname.replace(":", "_") } struct SDFIncludes { @@ -97,7 +100,7 @@ impl SDFAttribute { } fn get_field_string(&self) -> String { format!( - " #[yaserde(attribute, rename = \"{}\")]\n pub {}: {},\n", + " #[yaserde(attribute = true, rename = \"{}\")]\n pub {}: {},\n", self.name, sanitize_field(&self.name), self.required @@ -175,7 +178,7 @@ impl SDFElement { // TODO(arjo): Handle includes if let Some(reference) = &child.properties.reference { out += format!( - " #[yaserde(child, rename = \"{}\")]\n pub {}: Vec>,\n", + " #[yaserde(rename = \"{}\")]\n pub {}: Vec>,\n", reference, reference, self.typename() @@ -187,7 +190,7 @@ impl SDFElement { child_gen += child.code_gen(prefix.as_str(), file_map).as_str(); let typename = prefix + child.properties.name.to_case(Case::Pascal).as_str(); out += format!( - " #[yaserde(child, rename = \"{}\")]\n pub {}: {},\n", + " #[yaserde(rename = \"{}\")]\n pub {}: {},\n", child.properties.name, &sanitize_field(&child.properties.name), child @@ -199,7 +202,7 @@ impl SDFElement { } else { let typename = get_storage_type(child.properties.rtype.as_str()); out += format!( - " #[yaserde(child, rename = \"{}\")]\n pub {}: {},\n", + " #[yaserde(rename = \"{}\")]\n pub {}: {},\n", child.properties.name, &sanitize_field(&child.properties.name), child.properties.required.wrap_type(typename) @@ -213,7 +216,7 @@ impl SDFElement { .required .wrap_type(&("Sdf".to_string() + element.typename().as_str())); out += format!( - " #[yaserde(child, rename = \"{}\")]\n pub {} : {} /*{:?}*/,\n", + " #[yaserde(rename = \"{}\")]\n pub {} : {} /*{:?}*/,\n", element.properties.name.to_case(Case::Snake), &sanitize_field(&element.properties.name.to_case(Case::Snake)), typename, @@ -225,7 +228,7 @@ impl SDFElement { } } if !self.properties.rtype.is_empty() { - out += " #[yaserde(text)]\n pub data: String\n"; + out += " #[yaserde(text = true)]\n pub data: String\n"; } out += "}\n\n"; out += child_gen.as_str(); @@ -336,7 +339,11 @@ fn main() { let mut contents = String::new(); for (file, model) in &hashmap { - if file == "plugin.sdf" || file == "frame.sdf" || file == "geometry.sdf" { + if file == "plugin.sdf" + || file == "frame.sdf" + || file == "geometry.sdf" + || file == "params.sdf" + { //Skip continue; } diff --git a/sdformat_rs/sdformat_spec/1.10/README.md b/sdformat_rs/sdformat_spec/1.10/README.md new file mode 100644 index 0000000..aec44b8 --- /dev/null +++ b/sdformat_rs/sdformat_spec/1.10/README.md @@ -0,0 +1,5 @@ +Note that some fields that are marked as required in the specification were changed to not required to allow compatibility with existing assets. Specifically: + +* Topic parameters contact.sdf +* ixy, ixz and iyz in inertial.sdf +* Spring parameters in joint.sdf diff --git a/sdformat_rs/sdformat_spec/1.10/contact.sdf b/sdformat_rs/sdformat_spec/1.10/contact.sdf index d1cde50..2779bbc 100644 --- a/sdformat_rs/sdformat_spec/1.10/contact.sdf +++ b/sdformat_rs/sdformat_spec/1.10/contact.sdf @@ -5,7 +5,7 @@ name of the collision element within a link that acts as the contact sensor. - + Topic on which contact data is published. diff --git a/sdformat_rs/sdformat_spec/1.10/inertial.sdf b/sdformat_rs/sdformat_spec/1.10/inertial.sdf index f4d31ef..0cbfc24 100644 --- a/sdformat_rs/sdformat_spec/1.10/inertial.sdf +++ b/sdformat_rs/sdformat_spec/1.10/inertial.sdf @@ -56,14 +56,14 @@ The link's moment of inertia about Co (the link's center of mass) for Ĉx. - + The link's product of inertia about Co (the link's center of mass) for Ĉx and Ĉy, where the product of inertia convention -m x y (not +m x y) is used. If Ĉx or Ĉy is a principal inertia direction, ixy = 0. - + The link's product of inertia about Co (the link's center of mass) for Ĉx and Ĉz, where the product of inertia convention -m x z (not +m x z) @@ -75,7 +75,7 @@ The link's moment of inertia about Co (the link's center of mass) for Ĉy. - + The link's product of inertia about Co (the link's center of mass) for Ĉy and Ĉz, where the product of inertia convention -m y z (not +m y z) diff --git a/sdformat_rs/sdformat_spec/1.10/joint.sdf b/sdformat_rs/sdformat_spec/1.10/joint.sdf index b757614..80084f6 100644 --- a/sdformat_rs/sdformat_spec/1.10/joint.sdf +++ b/sdformat_rs/sdformat_spec/1.10/joint.sdf @@ -81,14 +81,14 @@ The physical static friction value of the joint. - + The spring reference position for this joint axis. - + The spring stiffness for this joint axis. - + specifies the limits of this joint Specifies the lower joint limit (radians for revolute joints, meters for prismatic joints). Omit if joint is continuous. @@ -138,10 +138,10 @@ The physical static friction value of the joint. - + The spring reference position for this joint axis. - + The spring stiffness for this joint axis. diff --git a/sdformat_rs/sdformat_spec/1.10/params.sdf b/sdformat_rs/sdformat_spec/1.10/params.sdf new file mode 100644 index 0000000..ea61657 --- /dev/null +++ b/sdformat_rs/sdformat_spec/1.10/params.sdf @@ -0,0 +1,8 @@ + + + Parameters allow overriding child elements of an included model + + This is a special element that should not be specified in an SDFormat file. It automatically copies child elements into the SDFormat element so that a plugin can access the data. + + + diff --git a/sdformat_rs/sdformat_spec/1.10/world.sdf b/sdformat_rs/sdformat_spec/1.10/world.sdf index 07dafc0..ebc96e4 100644 --- a/sdformat_rs/sdformat_spec/1.10/world.sdf +++ b/sdformat_rs/sdformat_spec/1.10/world.sdf @@ -40,6 +40,8 @@ + + The frame inside the included entity whose pose will be set by the specified pose element. If this element is specified, the pose must be specified. diff --git a/sdformat_rs/src/lib.rs b/sdformat_rs/src/lib.rs index 2ef3974..d576abd 100644 --- a/sdformat_rs/src/lib.rs +++ b/sdformat_rs/src/lib.rs @@ -1,4 +1,3 @@ -extern crate yaserde_derive; use std::collections::{BTreeSet, HashMap}; use std::fmt::Debug; use std::io::{Read, Write}; @@ -6,12 +5,12 @@ use std::ops::{Deref, DerefMut}; use std::sync::Arc; use nalgebra::*; -use yaserde::xml; -use yaserde::xml::attribute::OwnedAttribute; -use yaserde::xml::namespace::Namespace; +use xml::attribute::OwnedAttribute; +use xml::namespace::Namespace; + +pub use yaserde; use yaserde::{YaDeserialize, YaSerialize}; -use yaserde_derive::{YaDeserialize, YaSerialize}; // Most of the structs are generated automatically from the include!(concat!(env!("OUT_DIR"), "/sdf.rs")); @@ -152,6 +151,9 @@ pub struct ElementMap { elements: Vec, } +#[derive(Default, PartialEq, Clone, Debug)] +pub struct SdfParams(pub ElementMap); + // Manually declare plugin #[derive(Default, PartialEq, Clone, Debug)] pub struct SdfPlugin { @@ -284,6 +286,22 @@ impl YaDeserialize for SdfPlugin { } } +impl YaDeserialize for SdfParams { + fn deserialize(reader: &mut yaserde::de::Deserializer) -> Result { + let mut params = SdfParams::default(); + // deserializer code + if let Ok(xml::reader::XmlEvent::StartElement { .. }) = reader.next_event() { + while !matches!(reader.peek()?, xml::reader::XmlEvent::EndElement { .. }) { + let elem = deserialize_element(reader)?; + params.0.push(elem); + } + Ok(params) + } else { + Err("Element not found when parsing plugin".to_string()) + } + } +} + fn serialize_element( elem: &XmlElement, serializer: &mut yaserde::ser::Serializer, @@ -341,6 +359,32 @@ impl YaSerialize for SdfPlugin { } } +impl YaSerialize for SdfParams { + fn serialize( + &self, + serializer: &mut yaserde::ser::Serializer, + ) -> Result<(), String> { + serializer + .write(xml::writer::XmlEvent::start_element("experimental:params")) + .map_err(|e| e.to_string())?; + for element in self.0.elements.iter() { + serialize_element(element, serializer)?; + } + serializer + .write(xml::writer::XmlEvent::end_element()) + .map_err(|e| e.to_string())?; + Ok(()) + } + + fn serialize_attributes( + &self, + attributes: Vec, + namespace: Namespace, + ) -> Result<(Vec, Namespace), String> { + Ok((attributes, namespace)) + } +} + // Frame is another wierdo. For some reason it refuses to serialize/deserialize automatically // Hence the manual definition // Todo(arjo): Actually implement Frame. @@ -353,28 +397,28 @@ pub struct SdfFrame {} #[derive(Default, PartialEq, Clone, Debug, YaSerialize, YaDeserialize)] #[yaserde(rename = "geometry")] pub enum SdfGeometry { - #[yaserde(child, rename = "empty")] + #[yaserde(rename = "empty")] #[default] Empty, - #[yaserde(child, rename = "box")] + #[yaserde(rename = "box")] r#Box(SdfBoxShape), - #[yaserde(child, rename = "capsule")] + #[yaserde(rename = "capsule")] Capsule(SdfCapsuleShape), - #[yaserde(child, rename = "cylinder")] + #[yaserde(rename = "cylinder")] Cylinder(SdfCylinderShape), - #[yaserde(child, rename = "ellipsoid")] + #[yaserde(rename = "ellipsoid")] Ellipsoid(SdfEllipsoidShape), - #[yaserde(child, rename = "heightmap")] + #[yaserde(rename = "heightmap")] Heightmap(SdfHeightmapShape), - #[yaserde(child, rename = "image")] + #[yaserde(rename = "image")] Image(SdfImageShape), - #[yaserde(child, rename = "mesh")] + #[yaserde(rename = "mesh")] Mesh(SdfMeshShape), - #[yaserde(child, rename = "plane")] + #[yaserde(rename = "plane")] Plane(SdfPlaneShape), - #[yaserde(child, rename = "polyline")] + #[yaserde(rename = "polyline")] Polyline(SdfPolylineShape), - #[yaserde(child, rename = "sphere")] + #[yaserde(rename = "sphere")] Sphere(SdfSphereShape), } @@ -498,8 +542,7 @@ impl YaSerialize for Vector3d { let Some(yaserde_label) = serializer.get_start_event_name() else { return Err("vector3d is a primitive".to_string()); }; - let struct_start_event = - yaserde::xml::writer::XmlEvent::start_element(yaserde_label.as_ref()); + let struct_start_event = xml::writer::XmlEvent::start_element(yaserde_label.as_ref()); serializer .write(struct_start_event) @@ -511,7 +554,7 @@ impl YaSerialize for Vector3d { ))) .map_err(|e| e.to_string())?; serializer - .write(yaserde::xml::writer::XmlEvent::end_element()) + .write(xml::writer::XmlEvent::end_element()) .map_err(|e| e.to_string())?; Ok(()) } @@ -574,8 +617,7 @@ impl YaSerialize for Vector3i { let Some(yaserde_label) = serializer.get_start_event_name() else { return Err("vector3d is a primitive".to_string()); }; - let struct_start_event = - yaserde::xml::writer::XmlEvent::start_element(yaserde_label.as_ref()); + let struct_start_event = xml::writer::XmlEvent::start_element(yaserde_label.as_ref()); serializer .write(struct_start_event) @@ -587,7 +629,7 @@ impl YaSerialize for Vector3i { ))) .map_err(|e| e.to_string())?; serializer - .write(yaserde::xml::writer::XmlEvent::end_element()) + .write(xml::writer::XmlEvent::end_element()) .map_err(|e| e.to_string())?; Ok(()) } diff --git a/sdformat_rs/tests/camera_test.rs b/sdformat_rs/tests/camera_test.rs index 10fa156..5ff1c0d 100644 --- a/sdformat_rs/tests/camera_test.rs +++ b/sdformat_rs/tests/camera_test.rs @@ -121,7 +121,7 @@ fn test_plugin() { use sdformat_rs::SdfLight; #[test] fn test_light_direction_pose_serdeser() { - let test_syntax = "0 0 1"; + let test_syntax = "0 0 1"; let fr = from_str::(test_syntax); let serialized = yaserde::ser::to_string(&fr.unwrap()).unwrap(); assert_eq!(test_syntax.to_string(), serialized); @@ -130,7 +130,7 @@ fn test_light_direction_pose_serdeser() { use sdformat_rs::SdfModel; #[test] fn test_nested_model() { - let test_syntax = ""; + let test_syntax = ""; let fr = from_str::(test_syntax); let serialized = yaserde::ser::to_string(&fr.unwrap()).unwrap(); assert_eq!(test_syntax.to_string(), serialized);