Skip to content

Commit

Permalink
Merge pull request #1149 from joshka/master
Browse files Browse the repository at this point in the history
Add Map::shift_insert()
  • Loading branch information
dtolnay committed Jun 30, 2024
2 parents a9e089a + 309ef6b commit c17e63f
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
11 changes: 11 additions & 0 deletions src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,17 @@ impl Map<String, Value> {
self.map.insert(k, v)
}

/// Insert a key-value pair in the map at the given index.
///
/// If the map did not have this key present, `None` is returned.
///
/// If the map did have this key present, the key is moved to the new
/// position, the value is updated, and the old value is returned.
#[cfg(feature = "preserve_order")]
pub fn shift_insert(&mut self, index: usize, k: String, v: Value) -> Option<Value> {
self.map.shift_insert(index, k, v)
}

/// Removes a key from the map, returning the value at the key if the key
/// was previously in the map.
///
Expand Down
11 changes: 11 additions & 0 deletions tests/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ fn test_preserve_order() {
assert_eq!(keys, EXPECTED);
}

#[test]
#[cfg(feature = "preserve_order")]
fn test_shift_insert() {
let mut v: Value = from_str(r#"{"b":null,"a":null,"c":null}"#).unwrap();
let val = v.as_object_mut().unwrap();
val.shift_insert(0, "d".to_string(), Value::Null);

let keys: Vec<_> = val.keys().collect();
assert_eq!(keys, &["d", "b", "a", "c"]);
}

#[test]
fn test_append() {
// Sorted order
Expand Down

0 comments on commit c17e63f

Please sign in to comment.