use crate::plugin::ValidatedPluginRuntimeLimits;
use std::{
fmt::{Debug, Formatter},
num::NonZeroU64,
};
#[derive(Clone, Copy, Eq, PartialEq)]
pub struct GuestDecodeLimits {
string_bytes: NonZeroU64,
payload_bytes: NonZeroU64,
count: NonZeroU64,
}
impl GuestDecodeLimits {
#[must_use]
pub const fn from_validated_runtime(limits: ValidatedPluginRuntimeLimits) -> Self {
let max_message_bytes = limits.max_message_byte_limit();
Self {
string_bytes: max_message_bytes,
payload_bytes: max_message_bytes,
count: max_message_bytes,
}
}
#[must_use]
pub const fn new(
max_string_bytes: NonZeroU64,
max_payload_bytes: NonZeroU64,
max_count: NonZeroU64,
) -> Self {
Self {
string_bytes: max_string_bytes,
payload_bytes: max_payload_bytes,
count: max_count,
}
}
#[must_use]
pub const fn max_string_bytes(self) -> u64 {
self.string_bytes.get()
}
#[must_use]
pub const fn max_payload_bytes(self) -> u64 {
self.payload_bytes.get()
}
#[must_use]
pub(in crate::plugin) const fn max_payload_byte_limit(self) -> NonZeroU64 {
self.payload_bytes
}
#[must_use]
pub const fn max_count(self) -> u64 {
self.count.get()
}
}
impl Default for GuestDecodeLimits {
fn default() -> Self {
Self::from_validated_runtime(ValidatedPluginRuntimeLimits::default())
}
}
impl Debug for GuestDecodeLimits {
fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result {
formatter
.debug_struct("GuestDecodeLimits")
.field("string_bytes", &self.max_string_bytes())
.field("payload_bytes", &self.max_payload_bytes())
.field("count", &self.max_count())
.finish()
}
}