1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{Depth, DepthMap};
6
7#[derive(Clone, Debug, Default, Serialize, Deserialize)]
9pub struct Depths {
10 pub vecs: HashMap<String, Depth>, pub maps: HashMap<String, DepthMap>, }
13
14impl Depths {
15 pub fn new() -> Depths {
16 Depths {
17 vecs: Default::default(),
18 maps: Default::default(),
19 }
20 }
21
22 pub fn upsert(&mut self, key: &str, depth: Depth) {
23 let depth_map = depth.clone().into_depthmap();
24 self.maps.entry(key.into()).or_default().replace(depth_map);
25 self.vecs.entry(key.into()).or_default().replace(depth);
26 }
27
28 pub fn update(&mut self, key: &str, depth_change: Depth) {
29 let depth_map = depth_change.clone().into_depthmap();
30 self.maps
31 .entry(key.into())
32 .and_modify(|x| x.update(&depth_map))
33 .or_insert(depth_map);
34 self.vecs
35 .entry(key.into())
36 .and_modify(|x| *x = self.maps.get(key).unwrap().clone().into_depth())
37 .or_insert(depth_change);
38 }
39}