Skip to main content

aws_smithy_cbor/
codec.rs

1/*
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
6//! CBOR codec implementation for schema-based serialization.
7
8use aws_smithy_schema::codec::Codec;
9
10mod deserializer;
11mod serializer;
12
13pub use deserializer::CborDeserializer;
14pub use serializer::CborSerializer;
15
16/// Configuration for CBOR codec behavior.
17#[derive(Debug, Clone)]
18pub struct CborCodecSettings {
19    max_depth: u32,
20}
21
22impl CborCodecSettings {
23    /// Maximum aggregate nesting depth the deserializer will accept.
24    pub fn max_depth(&self) -> u32 {
25        self.max_depth
26    }
27}
28
29impl Default for CborCodecSettings {
30    fn default() -> Self {
31        Self { max_depth: 128 }
32    }
33}
34
35/// CBOR codec for schema-based serialization and deserialization.
36#[derive(Debug)]
37pub struct CborCodec {
38    settings: CborCodecSettings,
39}
40
41impl CborCodec {
42    /// Creates a new CBOR codec with the given settings.
43    pub fn new(settings: CborCodecSettings) -> Self {
44        Self { settings }
45    }
46}
47
48impl Default for CborCodec {
49    fn default() -> Self {
50        Self::new(CborCodecSettings::default())
51    }
52}
53
54impl Codec for CborCodec {
55    type Serializer = CborSerializer;
56    type Deserializer<'a> = CborDeserializer<'a>;
57
58    fn create_serializer(&self) -> Self::Serializer {
59        CborSerializer::new()
60    }
61
62    fn create_deserializer<'a>(&self, input: &'a [u8]) -> Self::Deserializer<'a> {
63        CborDeserializer::new(input, self.settings.max_depth)
64    }
65}