From 541ad36d138bf4ab8a4d6f8375112f3e623e8157 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Fri, 29 Nov 2024 09:08:19 +0100 Subject: [PATCH] Add get_fields_to_validate_for_member() --- src/process.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/process.rs b/src/process.rs index 312462b..c745fe5 100644 --- a/src/process.rs +++ b/src/process.rs @@ -140,6 +140,30 @@ impl ProcessState { self.encrypted_pcd == Value::Null || self.pcd_commitment == Value::Null } + + pub fn get_fields_to_validate_for_member(&self, member: &Member) -> anyhow::Result> { + let decrypted = self.decrypt_pcd()?; + + let roles = decrypted.extract_roles()?; + + let mut res: HashSet = HashSet::new(); + + // Are we in that role? + for (_, role_def) in roles { + if !role_def.members.contains(member) { + continue; + } else { + // what are the fields we can modify? + for rule in role_def.validation_rules { + if rule.allows_modification() { + res.extend(rule.fields.iter().map(|f| f.clone())); + } + } + } + } + + Ok(res.into_iter().collect()) + } } /// A process is basically a succession of states