liminal_protocol/lifecycle/admission/
record.rs1use crate::algebra::{ResourceDimension, ResourceVector};
2use crate::wire::{RecordAdmissionEnvelope, RecordTooLarge};
3
4#[derive(Clone, Copy, Debug, PartialEq, Eq)]
9pub struct RecordSizePermit {
10 encoded_record_charge: ResourceVector,
11}
12
13impl RecordSizePermit {
14 #[must_use]
16 pub const fn encoded_record_charge(self) -> ResourceVector {
17 self.encoded_record_charge
18 }
19}
20
21#[derive(Clone, Debug, PartialEq, Eq)]
23pub enum RecordSizeDecision {
24 Eligible(RecordSizePermit),
26 Respond(RecordTooLarge),
28}
29
30#[must_use]
36pub const fn check_record_size(
37 request: RecordAdmissionEnvelope,
38 encoded_record_charge: ResourceVector,
39 max_ordinary_record_charge: ResourceVector,
40) -> RecordSizeDecision {
41 if encoded_record_charge.entries > max_ordinary_record_charge.entries {
42 return RecordSizeDecision::Respond(RecordTooLarge {
43 request,
44 dimension: ResourceDimension::Entries,
45 encoded_record_charge,
46 max_ordinary_record_charge,
47 });
48 }
49 if encoded_record_charge.bytes > max_ordinary_record_charge.bytes {
50 return RecordSizeDecision::Respond(RecordTooLarge {
51 request,
52 dimension: ResourceDimension::Bytes,
53 encoded_record_charge,
54 max_ordinary_record_charge,
55 });
56 }
57 RecordSizeDecision::Eligible(RecordSizePermit {
58 encoded_record_charge,
59 })
60}