1use std::time::Instant;23use anyhow::bail;4use tracing::{debug, warn};56use crate::{Value, nix_go_json};78#[tracing::instrument(level = "info", skip(val))]9pub async fn assert_warn(action: &str, val: &Value) -> anyhow::Result<()> {10 let before_errors = Instant::now();11 let errors: Vec<String> = nix_go_json!(val.errors);12 debug!("errors evaluation took {:?}", before_errors.elapsed());13 if !errors.is_empty() {14 bail!(15 "failed with error{}{}",16 if errors.len() != 1 { "s:\n- " } else { ": " },17 errors.join("\n- "),18 );19 }2021 let before_errors = Instant::now();22 let warnings: Vec<String> = nix_go_json!(val.warnings);23 debug!("warnings evaluation took {:?}", before_errors.elapsed());24 if !warnings.is_empty() {25 warn!(26 "completed with warning{}{}",27 if warnings.len() != 1 { "s:\n- " } else { ": " },28 warnings.join("\n- "),29 );30 }31 Ok(())32}