1use aws_smithy_schema::codec::Codec;
9
10mod deserializer;
11mod serializer;
12
13pub use deserializer::CborDeserializer;
14pub use serializer::{CborSerializer, StructPrefix};
15
16#[derive(Debug, Clone)]
18pub struct CborCodecSettings {
19 max_depth: u32,
20 enforce_strictness: bool,
21 use_definite_lengths: bool,
22}
23
24impl CborCodecSettings {
25 pub fn use_definite_lengths(mut self, value: bool) -> Self {
29 self.use_definite_lengths = value;
30 self
31 }
32
33 pub fn enforce_strictness(mut self, value: bool) -> Self {
36 self.enforce_strictness = value;
37 self
38 }
39
40 pub fn max_depth(&self) -> u32 {
42 self.max_depth
43 }
44}
45
46impl Default for CborCodecSettings {
47 fn default() -> Self {
48 Self {
49 max_depth: 128,
50 enforce_strictness: false,
51 use_definite_lengths: false,
52 }
53 }
54}
55
56#[derive(Debug)]
58pub struct CborCodec {
59 settings: CborCodecSettings,
60}
61
62impl CborCodec {
63 pub fn new(settings: CborCodecSettings) -> Self {
65 Self { settings }
66 }
67}
68
69impl Default for CborCodec {
70 fn default() -> Self {
71 Self::new(CborCodecSettings::default())
72 }
73}
74
75impl Codec for CborCodec {
76 type Serializer = CborSerializer;
77 type Deserializer<'a> = CborDeserializer<'a>;
78
79 fn create_serializer(&self) -> Self::Serializer {
80 CborSerializer::new().with_definite_lengths(self.settings.use_definite_lengths)
81 }
82
83 fn create_deserializer<'a>(&self, input: &'a [u8]) -> Self::Deserializer<'a> {
84 CborDeserializer::new(input, self.settings.max_depth)
85 .with_strictness(self.settings.enforce_strictness)
86 }
87}