cfn-guard 3.2.0

AWS CloudFormation Guard is an open-source general-purpose policy-as-code evaluation tool. It provides developers with a simple-to-use, yet powerful and expressive domain-specific language (DSL) to define policies and enables developers to validate JSON- or YAML- formatted structured data with those policies.
Documentation
use crate::rules::{
    path_value::{Path, PathAwareValue},
    QueryResult,
};
use chrono::prelude::*;
use chrono::Utc;

pub(crate) fn parse_epoch(
    args: &[QueryResult],
) -> crate::rules::Result<Vec<Option<PathAwareValue>>> {
    let mut aggr = vec![];
    for entry in args.iter() {
        match entry {
            QueryResult::Literal(val) | QueryResult::Resolved(val) => match &**val {
                PathAwareValue::String((path, val)) => {
                    let datetime = DateTime::parse_from_rfc3339(val)
                        .map_err(|e| {
                            crate::Error::ParseError(format!(
                                "Failed to parse datetime: {val} at {path}: {e}"
                            ))
                        })?
                        .with_timezone(&Utc);
                    let epoch = datetime.timestamp();
                    aggr.push(Some(PathAwareValue::Int((path.clone(), epoch))));
                }
                _ => {
                    aggr.push(None);
                }
            },
            _ => {
                aggr.push(None);
            }
        }
    }

    Ok(aggr)
}

pub(crate) fn now() -> crate::rules::Result<Vec<Option<PathAwareValue>>> {
    let now = Utc::now().timestamp();
    let path = Path::root();
    let path_aware_value = PathAwareValue::Int((path, now));
    Ok(vec![Some(path_aware_value)])
}

#[cfg(test)]
#[path = "date_time_tests.rs"]
mod date_time_tests;