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}