use qubit_budget::json::JsonDecodeLimits;
use qubit_budget::json::JsonEncodeLimits;
use crate::metadata_limits::DEFAULT_MAX_KEY_BYTES;
use crate::metadata_limits::DEFAULT_MAX_METADATA_ENTRIES;
use crate::metadata_limits::DEFAULT_MAX_SCHEMA_FIELDS;
use crate::metadata_limits::MetadataLimits;
use crate::metadata_limits::default_json_decode_limits;
use crate::metadata_limits::default_json_encode_limits;
#[must_use]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct MetadataLimitsBuilder {
pub(crate) json_decode: JsonDecodeLimits,
pub(crate) json_encode: JsonEncodeLimits,
pub(crate) max_metadata_entries: usize,
pub(crate) max_schema_fields: usize,
pub(crate) max_key_bytes: usize,
}
impl MetadataLimitsBuilder {
#[inline(always)]
#[must_use = "the configured builder must be used to build metadata limits"]
pub fn json_decode(mut self, limits: JsonDecodeLimits) -> Self {
self.json_decode = limits;
self
}
#[inline(always)]
#[must_use = "the configured builder must be used to build metadata limits"]
pub fn json_encode(mut self, limits: JsonEncodeLimits) -> Self {
self.json_encode = limits;
self
}
#[inline(always)]
#[must_use = "the configured builder must be used to build metadata limits"]
pub const fn max_metadata_entries(mut self, maximum: usize) -> Self {
self.max_metadata_entries = maximum;
self
}
#[inline(always)]
#[must_use = "the configured builder must be used to build metadata limits"]
pub const fn max_schema_fields(mut self, maximum: usize) -> Self {
self.max_schema_fields = maximum;
self
}
#[inline(always)]
#[must_use = "the configured builder must be used to build metadata limits"]
pub const fn max_key_bytes(mut self, maximum: usize) -> Self {
self.max_key_bytes = maximum;
self
}
#[inline]
#[must_use = "the metadata limit validation result must be handled"]
pub fn build(self) -> Result<MetadataLimits, serde_json::Error> {
let limits = MetadataLimits::from_builder(self);
limits.validate()?;
Ok(limits)
}
}
impl Default for MetadataLimitsBuilder {
fn default() -> Self {
Self {
json_decode: default_json_decode_limits(),
json_encode: default_json_encode_limits(),
max_metadata_entries: DEFAULT_MAX_METADATA_ENTRIES,
max_schema_fields: DEFAULT_MAX_SCHEMA_FIELDS,
max_key_bytes: DEFAULT_MAX_KEY_BYTES,
}
}
}