cloud_scanner_cli/
inventory_exporter.rs

1use anyhow::Context;
2use schemars::schema_for;
3
4use crate::model::Inventory;
5
6/// Returns the inventory of cloud resources as json String
7pub async fn get_inventory_as_json(inventory: &Inventory) -> anyhow::Result<String> {
8    serde_json::to_string(&inventory).context("Cannot format inventory as json")
9}
10
11/// Print inventory to stdout
12pub async fn print_inventory(inventory: &Inventory) -> anyhow::Result<()> {
13    let json_inventory: String = get_inventory_as_json(inventory).await?;
14    println!("{}", json_inventory);
15    Ok(())
16}
17
18/// Returns the json schema of an inventory as String
19pub fn get_inventory_schema() -> anyhow::Result<String> {
20    let schema = schema_for!(Inventory);
21    let st = serde_json::to_string_pretty(&schema)?;
22    Ok(st)
23}
24
25/// Print inventory schema on stdout
26pub fn print_inventory_schema() -> anyhow::Result<()> {
27    let s = get_inventory_schema()?;
28    println!("{}", s);
29    Ok(())
30}
31
32#[cfg(test)]
33mod tests {
34    use crate::inventory_exporter::get_inventory_schema;
35    const INVENTORY_JSON_SCHEMA: &str = include_str!("../test-data/INVENTORY_JSON_SCHEMA.json");
36
37    #[test]
38    pub fn generate_inventory_schema() {
39        let s = get_inventory_schema().unwrap();
40        println!("{}", s);
41
42        assert_eq!(s, INVENTORY_JSON_SCHEMA, "schema do not match");
43    }
44}