heart_rate/
heart_rate.rs

1use anyhow::Result;
2use emotibit_data::{parser, types::DataType};
3use std::path::PathBuf;
4
5fn main() {
6    match average_hr(Some(PathBuf::from("raw_data.csv"))) {
7        Ok(rate) => println!("Average heart rate: {} bpm", rate),
8        Err(e) => println!("{:?}", e),
9    }
10}
11
12fn average_hr(path_buf: Option<PathBuf>) -> Result<f32> {
13    let rates: Vec<i32> = parser::get_packets(
14        &path_buf
15            .as_ref()
16            .unwrap()
17            .clone()
18            .into_os_string()
19            .into_string()
20            .unwrap(),
21    )?
22    .into_iter()
23    .filter_map(|x| x.ok())
24    .filter_map(|x| match x.data_type {
25        DataType::HR(v) => Some(v[0]),
26        _ => None,
27    })
28    .collect();
29
30    Ok(average(&rates))
31}
32
33fn average(numbers: &[i32]) -> f32 {
34    numbers.iter().sum::<i32>() as f32 / numbers.len() as f32
35}