pub struct Options { /* private fields */ }Expand description
What to refuse beyond the RFC 8785 baseline.
Implementations§
Source§impl Options
impl Options
Sourcepub const fn ijson() -> Self
pub const fn ijson() -> Self
RFC 8785 plus the RFC 7493 I-JSON profile: an integer must lie inside the range where an IEEE-754 double is exact, and a Unicode noncharacter is refused in a string literal.
Opt-in rather than default, and the reason is load-bearing: the RFC 8785
reference suite carries 1e30 and 1e-27, so a crate whose default
refused them would fail the specification it implements.
Sourcepub const fn max_depth(self, limit: usize) -> Self
pub const fn max_depth(self, limit: usize) -> Self
Set the maximum number of nested arrays and objects.
Lowered freely; raised only as far as MAX_SUPPORTED_DEPTH, where a
larger request saturates. The clamp is the difference between a
configuration and a crash.
Sourcepub const fn max_bytes(self, limit: Option<usize>) -> Self
pub const fn max_bytes(self, limit: Option<usize>) -> Self
Set the maximum input size in bytes, or None for no cap.
Sourcepub fn check_input_length(&self, len: usize) -> Result<(), Error>
pub fn check_input_length(&self, len: usize) -> Result<(), Error>
Check only the configured byte cap before allocating an input buffer.
This does not inspect, parse or admit any bytes. Passing the check means
only that len is within the configured cap, or that no cap is set.
Admission still requires admit_with, which uses this same check first.
use jcs_admit::{admit_with, Error, Options};
let opts = Options::rfc8785().max_bytes(Some(16));
assert_eq!(opts.check_input_length(16), Ok(()));
assert_eq!(opts.check_input_length(17),
Err(Error::TooLarge { len: 17, limit: 16 }));
// A length within the cap does not establish valid JSON.
assert!(opts.check_input_length(1).is_ok());
assert!(admit_with(b"{", &opts).is_err());Sourcepub const fn safe_integers(self, refuse: bool) -> Self
pub const fn safe_integers(self, refuse: bool) -> Self
Refuse an integer outside the range where an IEEE-754 double is exact.
Sourcepub const fn integers_only(self, refuse: bool) -> Self
pub const fn integers_only(self, refuse: bool) -> Self
Refuse any number with a fractional part.
Tighter than RFC 7493, which permits one. Two implementations that never format a float can never disagree about one, so pinning integers only removes a class of cross-language divergence rather than testing for it.
Sourcepub const fn reject_noncharacters(self, refuse: bool) -> Self
pub const fn reject_noncharacters(self, refuse: bool) -> Self
Refuse a Unicode noncharacter in a string literal (RFC 7493 section 2.1).