cloud_scanner_cli/
inventory_exporter.rs1use anyhow::Context;
2use schemars::schema_for;
3
4use crate::model::Inventory;
5
6pub 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
11pub 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
18pub 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
25pub 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}