From 31006ef9c7f6b3132272e13a886d2e5a413172db Mon Sep 17 00:00:00 2001 From: David Marshall Date: Wed, 29 May 2024 22:04:56 -0500 Subject: [PATCH] expose policy info from the engine --- src/engine.rs | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/src/engine.rs b/src/engine.rs index 8df331a2..fe0edf6e 100644 --- a/src/engine.rs +++ b/src/engine.rs @@ -129,6 +129,61 @@ impl Engine { .collect() } + pub fn get_packages_texts(&self) -> Result> { + let mut packages_text: Map = Map::new(); + + for module in &self.modules { + let path_string = Interpreter::get_path_string(&module.package.refr, Some("data"))?; + let package_text = module.package.span.text().to_string(); + packages_text.insert(path_string, package_text); + } + + Ok(packages_text) + } + + pub fn get_packages_imports(&self) -> Result>> { + let mut packages_imports: Map> = Map::new(); + + for module in &self.modules { + let path_string = Interpreter::get_path_string(&module.package.refr, Some("data"))?; + let import_strings: Result> = module + .imports + .iter() + .map(|import| Ok(import.span.text().to_string())) + .collect(); + packages_imports.insert(path_string, import_strings?); + } + + Ok(packages_imports) + } + + pub fn get_packages_policies(&self) -> Result>> { + let mut packages_policies: Map> = Map::new(); + + for module in &self.modules { + let path_string = Interpreter::get_path_string(&module.package.refr, Some("data"))?; + let policy_strings: Result> = module + .policy + .iter() + .map(|policy| Ok(policy.span().text().to_string())) + .collect(); + packages_policies.insert(path_string, policy_strings?); + } + + Ok(packages_policies) + } + + pub fn get_package_rego_v1(&self) -> Result> { + let mut packages_rego_v1s: Map = Map::new(); + + for module in &self.modules { + let path_string = Interpreter::get_path_string(&module.package.refr, Some("data"))?; + packages_rego_v1s.insert(path_string, module.rego_v1); + } + + Ok(packages_rego_v1s) + } + /// Set the input document. /// /// * `input`: Input documented. Typically this [Value] is constructed from JSON or YAML.