1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#![cfg(feature = "serde")]

use std::collections::HashMap;

use crate::config::opts::Opts;
use crate::config::raw_opts::Dump;
use enum_iterator::all;

pub fn dump_multi(configs: &[Opts], dump: Vec<Dump>) -> anyhow::Result<()> {
    let dump = if dump.is_empty() {
        all().collect()
    } else {
        dump
    };
    let data = configs
        .iter()
        .map(|config| {
            let mut data = HashMap::new();
            for request in &dump {
                match request {
                    Dump::Config => data.insert("config", serde_yaml::to_value(config)?),
                    Dump::Ir => data.insert("ir", config.get_ir_file().map(serde_yaml::to_value)??),
                };
            }
            Ok(data)
        })
        .collect::<anyhow::Result<Vec<_>>>()?;
    let data = serde_yaml::to_string(&data)?;
    println!("{data}");
    Ok(())
}