use xchecker_utils::types::PacketEvidence;
mod budget;
mod builder;
mod model;
mod render;
mod selectors;
#[derive(Debug, Clone)]
pub struct Packet {
pub content: String,
pub blake3_hash: String,
pub evidence: PacketEvidence,
pub budget_used: BudgetUsage,
}
impl Packet {
#[must_use]
pub const fn new(
content: String,
blake3_hash: String,
evidence: PacketEvidence,
budget_used: BudgetUsage,
) -> Self {
Self {
content,
blake3_hash,
evidence,
budget_used,
}
}
#[must_use]
#[allow(dead_code)] pub fn content(&self) -> &str {
&self.content
}
#[must_use]
pub fn hash(&self) -> &str {
&self.blake3_hash
}
#[must_use]
#[allow(dead_code)] pub const fn evidence(&self) -> &PacketEvidence {
&self.evidence
}
#[must_use]
pub const fn budget_usage(&self) -> &BudgetUsage {
&self.budget_used
}
#[must_use]
#[allow(dead_code)] pub const fn is_within_budget(&self) -> bool {
!self.budget_used.is_exceeded()
}
}
#[derive(Debug, Clone)]
pub struct BudgetUsage {
pub bytes_used: usize,
pub lines_used: usize,
pub max_bytes: usize,
pub max_lines: usize,
}
impl BudgetUsage {
#[must_use]
pub const fn new(max_bytes: usize, max_lines: usize) -> Self {
Self {
bytes_used: 0,
lines_used: 0,
max_bytes,
max_lines,
}
}
#[must_use]
pub const fn would_exceed(&self, bytes: usize, lines: usize) -> bool {
self.bytes_used + bytes > self.max_bytes || self.lines_used + lines > self.max_lines
}
pub const fn add_content(&mut self, bytes: usize, lines: usize) {
self.bytes_used += bytes;
self.lines_used += lines;
}
#[must_use]
pub const fn is_exceeded(&self) -> bool {
self.bytes_used > self.max_bytes || self.lines_used > self.max_lines
}
}
pub use builder::{DEFAULT_PACKET_MAX_BYTES, DEFAULT_PACKET_MAX_LINES, PacketBuilder};
pub use model::{PriorityRules, SelectedFile};
pub use selectors::ContentSelector;