laze_insights/
mod.rs

1use camino::Utf8PathBuf;
2use indexmap::IndexMap;
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Deserialize, Serialize, Debug, Default)]
7pub struct Insights {
8    pub builds: IndexMap<String, IndexMap<String, InsightBuildInfo>>,
9}
10
11#[derive(Deserialize, Serialize, Debug)]
12pub struct InsightBuildInfo {
13    pub outfile: Utf8PathBuf,
14    pub modules: IndexMap<String, ModuleInfo>,
15}
16
17#[derive(Deserialize, Serialize, Debug, Clone)]
18pub struct ModuleInfo {
19    #[serde(skip_serializing_if = "Vec::is_empty")]
20    pub deps: Vec<String>,
21}
22
23#[cfg(not(feature = "building-laze-insights"))]
24mod not_for_lib {
25    use super::{InsightBuildInfo, Insights};
26    use crate::generate::BuildInfo;
27
28    impl Insights {
29        pub fn from_builds(builds: &Vec<BuildInfo>) -> Insights {
30            let mut insights = Insights::default();
31            for build_info in builds {
32                insights
33                    .builds
34                    .entry(build_info.builder.clone())
35                    .or_default()
36                    .insert(
37                        build_info.binary.clone(),
38                        InsightBuildInfo::from(build_info),
39                    );
40            }
41            insights
42        }
43    }
44
45    impl From<&BuildInfo> for InsightBuildInfo {
46        fn from(build_info: &BuildInfo) -> Self {
47            Self {
48                outfile: build_info.out.clone(),
49                modules: build_info.module_info.as_ref().unwrap().clone(),
50            }
51        }
52    }
53}