Skip to main content

codec_jcs/
lib.rs

1// SPDX-FileCopyrightText: 2026 ReallyMe LLC
2//
3// SPDX-License-Identifier: MIT OR Apache-2.0
4
5//! JSON Canonicalization Scheme helpers.
6//!
7//! Object member ordering and finite floating-point formatting follow RFC
8//! 8785. The raw-text API rejects duplicate object member names and malformed
9//! JSON. Integer tokens that `serde_json` retains exactly as `i64` or `u64`
10//! are additionally rejected outside `[-(2^53)+1, (2^53)-1]`; integer-valued
11//! binary64 numbers are subject to the same local policy. Non-integer binary64
12//! numbers follow RFC 8785's ECMAScript rounding semantics.
13//! If dependency feature unification enables `serde_json/arbitrary_precision`,
14//! the raw-text entry point fails closed with
15//! [`JcsError::UnsupportedNumberRepresentation`]. The feature changes the
16//! deserializer's number visitor contract, so proceeding could produce
17//! noncanonical bytes. Integrators that require that feature should use a
18//! separately compiled JCS lane until an independent tokenizer is available.
19
20mod canonicalize;
21mod error;
22mod parse_json;
23
24pub use canonicalize::{canonicalize_json_text, canonicalize_trusted_json_value};
25pub use error::JcsError;
26
27/// Maximum array/object nesting depth accepted by both JCS entry points.
28///
29/// The text parser applies this guard after disabling serde_json's recursion
30/// limit, and trusted values apply it during canonicalization.
31pub const MAX_NESTING_DEPTH: usize = 128;