Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
9343a61
perf: reuse cached helpers across serde codecs
jterapin Sep 14, 2026
57f8203
perf: optimize schema extension cache access
jterapin Sep 15, 2026
ef5da2a
perf: reference collection shapes directly
jterapin Sep 15, 2026
6390b3d
perf: simplify schema shape dispatch
jterapin Sep 16, 2026
1ba1c82
fix: avoid reusing serde workers across calls
jterapin Sep 21, 2026
e3ffc2a
fix: align serde RBS contracts
jterapin Sep 21, 2026
ecf2dea
perf: optimize CBOR decoder reads
jterapin Sep 21, 2026
aff369f
perf: decode CBOR headers once
jterapin Sep 21, 2026
99dcca0
perf: reduce CBOR collection allocations
jterapin Sep 21, 2026
eb19cd2
perf: cache CBOR byte headers
jterapin Sep 21, 2026
c328205
perf: reduce JSON builder allocations
jterapin Sep 21, 2026
79d52b4
perf: avoid mutating unknown JSON unions
jterapin Sep 21, 2026
930b43d
perf: optimize client request preparation
jterapin Sep 21, 2026
a24af7b
perf: reduce client request allocations
jterapin Sep 23, 2026
1db7e71
perf: optimize XML serialization and timestamps
jterapin Sep 23, 2026
bd1ae23
perf: reduce CBOR builder allocations
jterapin Sep 23, 2026
8a9e64b
perf: optimize document conversion
jterapin Sep 23, 2026
71f1f6a
perf: optimize host label validation
jterapin Sep 23, 2026
f89968e
perf: optimize CBOR bignum and union parsing
jterapin Sep 23, 2026
4025ad6
perf: reduce XML attribute rendering allocations
jterapin Sep 23, 2026
441321c
perf: prioritize common CBOR encoder types
jterapin Sep 23, 2026
12c32b7
perf: optimize fixed response status checks
jterapin Sep 23, 2026
13b71a0
Revert "perf: reduce XML attribute rendering allocations"
jterapin Sep 23, 2026
57a79d0
perf: flatten XML extension metadata
jterapin Sep 23, 2026
0740505
fix: cache XML flattened as a boolean
jterapin Sep 23, 2026
5909780
perf: streamline XML member metadata reads
jterapin Sep 23, 2026
2d877c9
perf: flatten schema extension metadata
jterapin Sep 23, 2026
8993806
refactor: simplify schema aggregate resolution
jterapin Sep 23, 2026
866cb77
perf: flatten JSON extension metadata
jterapin Sep 23, 2026
c6fb952
perf: flatten HTTP extension metadata
jterapin Sep 23, 2026
7e27a94
perf: resolve operation metadata independently
jterapin Sep 23, 2026
5ac3854
perf: reuse serde workers across calls
jterapin Sep 23, 2026
8fc250a
fix: avoid HTTP extension method collision
jterapin Sep 23, 2026
711d98a
test: cover concurrent CBOR codec reuse
jterapin Sep 23, 2026
a393b79
fix: preserve member block arguments
jterapin Sep 23, 2026
f89e7eb
docs: add private extension examples
jterapin Sep 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 22 additions & 20 deletions gems/smithy-cbor/lib/smithy-cbor/builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@ def build(shape, data)
private

def build_shape(shape, value)
case Schema::Extension.target_shape(shape)
when Schema::Extension::SHAPE_BLOB then blob(value)
when Schema::Extension::SHAPE_LIST then list(shape, value)
when Schema::Extension::SHAPE_MAP then map(shape, value)
when Schema::Extension::SHAPE_STRUCTURE then structure(shape, value)
when Schema::Extension::SHAPE_UNION then union(shape, value)
target = shape.target
case target
when Schema::Shapes::BlobShape then blob(value)
when Schema::Shapes::ListShape then list(shape, value)
when Schema::Shapes::MapShape then map(shape, value)
when Schema::Shapes::StructureShape then structure(shape, value)
when Schema::Shapes::UnionShape then union(shape, value)
else value
end
end
Expand All @@ -34,7 +35,7 @@ def blob(value)
def list(shape, values)
return if values.nil?

member, _target_shape, _sparse = Schema::Extension.list_member(shape.target)
member = shape.target.member
values.collect do |value|
build_shape(member, value)
end
Expand All @@ -43,40 +44,41 @@ def list(shape, values)
def map(shape, values)
return if values.nil?

value_member, _target_shape, _sparse = Schema::Extension.map_value_member(shape.target)
values.each.with_object({}) do |(key, value), data|
value_member = shape.target.value
data = {}
values.each do |key, value|
data[key] = build_shape(value_member, value)
end
data
end

def structure(shape, values)
return if values.nil?

index = Schema::Extension.member_index(shape.target)
values.each_pair.with_object({}) do |(member_name, value), data|
target = shape.target
data = {}
values.each_pair do |member_name, value|
next if value.nil?
next unless (entry = index[member_name])
next unless (member_shape = target.member(member_name))

wire_name, member_shape, _target_shape = entry
data[wire_name] = build_shape(member_shape, value)
data[member_shape.name] = build_shape(member_shape, value)
end
data
end

def union(shape, values)
return if values.nil?

key, value =
if values.is_a?(Schema::Union)
member_name, _member_shape = shape.target.member_by_type(values.class)
[member_name, values.value]
[values.member, values.value]
else
values.first
end
entry = Schema::Extension.member_index(shape.target)[key]
return {} unless entry
member_shape = shape.target.member(key)
return {} unless member_shape

wire_name, member_shape, _target_shape = entry
{ wire_name => build_shape(member_shape, value) }
{ member_shape.name => build_shape(member_shape, value) }
end
end
end
Expand Down
7 changes: 4 additions & 3 deletions gems/smithy-cbor/lib/smithy-cbor/codec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,23 @@ module Cbor
class Codec
# @param [Hash] options
def initialize(options = {})
@options = options
@builder = Builder.new(options).freeze
@parser = Parser.new(options).freeze
end

# @param [Shape] shape
# @param [Object] data
# @return [String, nil]
def build(shape, data)
Builder.new(@options).build(shape, data)
@builder.build(shape, data)
end

# @param [Shape] shape
# @param [String] bytes
# @param [Object, nil] result (nil)
# @return [Object, nil]
def parse(shape, bytes, result = nil)
Parser.new(@options).parse(shape, bytes, result)
@parser.parse(shape, bytes, result)
end
end
end
Expand Down
Loading
Loading