use std::error::Error;
use std::fmt;
use std::sync::Arc;
use qubit_budget::MeasuredBudgetError;
use super::JsonDecodeStage;
use super::JsonRootKind;
use super::JsonSyntaxError;
#[must_use]
#[derive(Debug, Clone)]
pub enum JsonDecodeErrorSource<R, Q = usize>
where
Q: Copy + fmt::Debug,
{
Budget {
stage: JsonDecodeStage,
raw_input_bytes: usize,
normalized_input_bytes: Option<usize>,
source: MeasuredBudgetError<R, Q>,
},
EmptyInput {
stage: JsonDecodeStage,
raw_input_bytes: usize,
normalized_input_bytes: Option<usize>,
},
InvalidUtf8 {
raw_input_bytes: usize,
valid_up_to: usize,
error_len: Option<usize>,
source: Option<std::str::Utf8Error>,
},
InvalidJson {
raw_input_bytes: usize,
normalized_input_bytes: Option<usize>,
syntax: JsonSyntaxError,
source: Option<Arc<dyn Error + Send + Sync>>,
},
UnexpectedTopLevel {
raw_input_bytes: usize,
normalized_input_bytes: Option<usize>,
expected: JsonRootKind,
actual: JsonRootKind,
},
Deserialize {
raw_input_bytes: usize,
normalized_input_bytes: Option<usize>,
line: usize,
column: usize,
source: Option<Arc<dyn Error + Send + Sync>>,
},
}