calltrace 0.1.12

A service to structure your call traces (call stacks)
Documentation
use crate::calls::CallStacks;

use crate::folder;
pub struct Differ {}

impl Differ {
    pub fn not_in(target: &CallStacks, base: &CallStacks) -> folder::Folder {
        let folder_base = folder::Folder::new(base);
        let folder_target = folder::Folder::new(target);
        let mut css = folder::Folder::new(&CallStacks::new());
        for cs in &folder_target.map {
            if !folder_base.has(cs.0) {
                css.insert(cs.0.clone(), *folder_target.map.get(cs.0).unwrap());
            } else {
                match (folder_target.map.get(cs.0), folder_base.map.get(cs.0)) {
                    (Some(t), Some(b)) => {
                        if t > b {
                            css.insert(cs.0.clone(), *t - *b);
                        }
                    }
                    (Some(t), None) => {
                        css.insert(cs.0.clone(), *t);
                    }
                    (_, _) => {}
                }
            }
        }
        css
    }
}