1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// =============================================================================
// Copyright (c) 2026 Haixing Hu.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0.
// =============================================================================
//! Additional validated decoding limits.
/// Identifies an additional per-document decode limit for validated JSON.
///
/// The decoder reports this value in
/// [`JsonValidatedDecodeError::Limit`](crate::decode::JsonValidatedDecodeError::Limit)
/// when a configured value or encoded-string bound is exceeded.
///
/// # Examples
///
/// ```
/// use std::convert::Infallible;
///
/// use qubit_json::decode::JsonDecoder;
/// use qubit_json::decode::JsonNumberPolicy;
/// use qubit_json::decode::JsonValidatedDecodeError;
/// use qubit_json::decode::JsonValidatedDecodeOptions;
/// use qubit_json::decode::JsonValidatedLimit;
///
/// let options = JsonValidatedDecodeOptions::builder()
/// .max_value_and_key_nodes(2)
/// .build();
/// let error = JsonDecoder::unlimited()
/// .decode_unique_validated_str("{\"key\":1}", &options, |_, _| {
/// Ok::<_, Infallible>(JsonNumberPolicy::Preserve)
/// })
/// .expect_err("the object, key, and value exceed the two-node limit");
/// assert!(matches!(
/// error,
/// JsonValidatedDecodeError::Limit {
/// limit: JsonValidatedLimit::ValueAndKeyNodes,
/// ..
/// }
/// ));
/// ```