1use crate::limits::NbtLimits;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
4pub enum ParseMode {
5 #[default]
6 Strict,
7 Compatible,
8}
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub struct NbtReadConfig {
12 pub limits: NbtLimits,
13 pub parse_mode: ParseMode,
14}
15
16impl NbtReadConfig {
17 pub const fn new(limits: NbtLimits, parse_mode: ParseMode) -> Self {
18 Self { limits, parse_mode }
19 }
20
21 pub const fn strict(limits: NbtLimits) -> Self {
22 Self::new(limits, ParseMode::Strict)
23 }
24
25 pub const fn compatible(limits: NbtLimits) -> Self {
26 Self::new(limits, ParseMode::Compatible)
27 }
28
29 pub const fn with_parse_mode(mut self, parse_mode: ParseMode) -> Self {
30 self.parse_mode = parse_mode;
31 self
32 }
33
34 pub const fn with_limits(mut self, limits: NbtLimits) -> Self {
35 self.limits = limits;
36 self
37 }
38}
39
40impl Default for NbtReadConfig {
41 fn default() -> Self {
42 Self::strict(NbtLimits::default())
43 }
44}