Skip to content

Commit 48ebcad

Browse files
Add mutating API to plugin get() (#11)
Signed-off-by: Luca Della Vedova <[email protected]>
1 parent 2d20fe0 commit 48ebcad

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

sdformat_rs/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,12 @@ impl ElementMap {
169169
.and_then(|idxs| self.elements.get(*idxs.iter().next()?))
170170
}
171171

172+
pub fn get_mut(&mut self, name: &str) -> Option<&mut XmlElement> {
173+
self.indexes
174+
.get(name)
175+
.and_then(|idxs| self.elements.get_mut(*idxs.iter().next()?))
176+
}
177+
172178
pub fn get_all(&self, name: &str) -> Option<Vec<&XmlElement>> {
173179
self.indexes
174180
.get(name)

sdformat_rs/tests/camera_test.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ fn test_plugin() {
9292
let fr = from_str::<SdfPlugin>(test_syntax).unwrap();
9393
test_plugin_content(&fr);
9494
assert!(to.is_ok());
95+
96+
// Test accessing and mutating API
97+
let test_syntax = "<plugin name=\"hello\" filename=\"world.so\"><size>42</size></plugin>";
98+
let mut plugin = from_str::<SdfPlugin>(test_syntax).unwrap();
99+
let size = plugin.elements.get("size").unwrap();
100+
assert_eq!(size.data, ElementData::String("42".to_string()));
101+
let size = plugin.elements.get_mut("size").unwrap();
102+
size.data = ElementData::String("hello".to_string());
103+
104+
let size = plugin.elements.get("size").unwrap();
105+
assert_eq!(size.data, ElementData::String("hello".to_string()));
95106
}
96107

97108
use sdformat_rs::SdfLight;

0 commit comments

Comments
 (0)