Skip to main content

dicom_toolkit_data/
sequence.rs

1//! Helper functions for working with DICOM sequences.
2//!
3//! A DICOM sequence is stored as `Vec<DataSet>` inside `Value::Sequence`.
4//! This module provides ergonomic helpers so callers don't have to import
5//! slice methods directly.
6
7use crate::dataset::DataSet;
8
9/// Return the sequence item at `index`, or `None` if out of bounds.
10pub fn get_item(items: &[DataSet], index: usize) -> Option<&DataSet> {
11    items.get(index)
12}
13
14/// Return the number of items in a sequence.
15pub fn item_count(items: &[DataSet]) -> usize {
16    items.len()
17}
18
19#[cfg(test)]
20mod tests {
21    use super::*;
22
23    #[test]
24    fn get_item_in_bounds() {
25        let items = vec![DataSet::new(), DataSet::new()];
26        assert!(get_item(&items, 0).is_some());
27        assert!(get_item(&items, 1).is_some());
28    }
29
30    #[test]
31    fn get_item_out_of_bounds() {
32        let items = vec![DataSet::new()];
33        assert!(get_item(&items, 1).is_none());
34    }
35
36    #[test]
37    fn item_count_empty() {
38        assert_eq!(item_count(&[]), 0);
39    }
40
41    #[test]
42    fn item_count_nonempty() {
43        let items = vec![DataSet::new(); 3];
44        assert_eq!(item_count(&items), 3);
45    }
46}