Skip to content

Commit b0a757b

Browse files
authored
Optimize DAG-CBOR encoding for arrays and maps (#88)
1 parent 151672d commit b0a757b

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ fn sort_map_keys(keys: &Bound<PyList>, len: usize) -> Result<Vec<(PyBackedStr, u
105105
// Returns key and index.
106106
let mut keys_str = Vec::with_capacity(len);
107107
for i in 0..len {
108-
let item = keys.get_item(i)?;
108+
let item = unsafe { keys.get_item_unchecked(i) };
109109
let key = match item.cast::<PyString>() {
110110
Ok(k) => k.to_owned(),
111111
Err(_) => return Err(anyhow!("Map keys must be strings")),
@@ -354,7 +354,8 @@ where
354354
types::Array::bounded(len, w)?;
355355

356356
for i in 0..len {
357-
encode_dag_cbor_from_pyobject(_py, &l.get_item(i)?, w)?;
357+
let item = unsafe { l.get_item_unchecked(i) };
358+
encode_dag_cbor_from_pyobject(_py, &item, w)?;
358359
}
359360

360361
Ok(())
@@ -369,7 +370,8 @@ where
369370
key.get(..)
370371
.expect("whole range is a valid string")
371372
.encode(w)?;
372-
encode_dag_cbor_from_pyobject(_py, &values.get_item(i)?, w)?;
373+
let value = unsafe { values.get_item_unchecked(i) };
374+
encode_dag_cbor_from_pyobject(_py, &value, w)?;
373375
}
374376

375377
Ok(())

0 commit comments

Comments
 (0)