templar_curator_primitives/policy/
cap_group_adapter.rs

1//! Shared adapters for cap-group operations from raw field values.
2
3use templar_vault_kernel::Wad;
4
5use super::cap_group::CapGroupRecord;
6
7/// Read the raw absolute-cap field from a [`CapGroupRecord`].
8///
9/// Returns `0` when the underlying cap is unset/unlimited.
10#[must_use]
11pub fn cap_group_record_absolute_cap(record: &CapGroupRecord) -> u128 {
12    record.cap.absolute_cap.map(|cap| cap.get()).unwrap_or(0)
13}
14
15/// Read the raw relative-cap field from a [`CapGroupRecord`].
16///
17/// Returns `Wad::one()` when the underlying cap is unset/unlimited.
18#[must_use]
19pub fn cap_group_record_relative_cap(record: &CapGroupRecord) -> Wad {
20    record.cap.relative_cap.unwrap_or(Wad::one())
21}
22
23/// Update only the absolute-cap field of a [`CapGroupRecord`], preserving relative cap and principal.
24pub fn set_cap_group_record_absolute_cap(record: &mut CapGroupRecord, absolute_cap: u128) {
25    let relative_cap = cap_group_record_relative_cap(record);
26    record.cap = super::cap_group::CapGroup::builder()
27        .absolute_cap(absolute_cap)
28        .relative_cap(relative_cap)
29        .build();
30}
31
32/// Update only the relative-cap field of a [`CapGroupRecord`], preserving absolute cap and principal.
33pub fn set_cap_group_record_relative_cap(record: &mut CapGroupRecord, relative_cap: Wad) {
34    let absolute_cap = cap_group_record_absolute_cap(record);
35    record.cap = super::cap_group::CapGroup::builder()
36        .absolute_cap(absolute_cap)
37        .relative_cap(relative_cap)
38        .build();
39}