aboutsummaryrefslogtreecommitdiffstats
path: root/src/access/rules.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/access/rules.rs')
-rw-r--r--src/access/rules.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/access/rules.rs b/src/access/rules.rs
index bef9a13..ac7377f 100644
--- a/src/access/rules.rs
+++ b/src/access/rules.rs
@@ -109,6 +109,20 @@ impl Reads {
}
}
+impl Reads {
+ /// Whether the policy at `seen` requires changes signed (`Policy::required`): read
+ /// once for the heads, as `judge_reading` reads it. False if `doc` lacks one of them.
+ pub(crate) fn required(&mut self, doc: &Document, seen: &[ChangeHash]) -> bool {
+ let Some(at) = At::new(doc, seen) else {
+ return false;
+ };
+ self.at(seen)
+ .policy
+ .get_or_insert_with(|| super::policy::of(&at))
+ .required()
+ }
+}
+
/// Judges `change`, about to be applied to `doc` (of `epoch`).
pub(crate) fn judge(doc: &Document, epoch: Epoch, change: &Change<'_>) -> Result<(), Refusal> {
judge_reading(doc, epoch, change, &mut Reads::default())