1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use crate::measurement::MeasurementError;
use crate::rsi::error::Error;
use crate::rsi::Rd;

pub fn read(
    rd: &Rd,
    index: usize,
    out: &mut crate::measurement::Measurement,
) -> Result<(), crate::rsi::error::Error> {
    let measurement = rd
        .measurements
        .iter()
        .nth(index)
        .ok_or(Error::InvalidMeasurementIndex)?;

    out.as_mut_slice().copy_from_slice(measurement.as_slice());
    Ok(())
}

pub fn extend(
    rd: &mut Rd,
    index: usize,
    f: impl Fn(&mut crate::measurement::Measurement) -> Result<(), MeasurementError>,
) -> Result<(), crate::rsi::error::Error> {
    let measurement = rd
        .measurements
        .iter_mut()
        .nth(index)
        .ok_or(Error::InvalidMeasurementIndex)?;

    f(measurement)?;
    Ok(())
}