From 66c9fd45d64a749af60d92e1e0efc1812ff895e3 Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Wed, 13 Apr 2022 12:09:00 -0700 Subject: [PATCH] Map key and value when converting `Hash` types --- plugins/commands/serve/mappers/known_types.rb | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/plugins/commands/serve/mappers/known_types.rb b/plugins/commands/serve/mappers/known_types.rb index 6e524c208..edc14ce51 100644 --- a/plugins/commands/serve/mappers/known_types.rb +++ b/plugins/commands/serve/mappers/known_types.rb @@ -120,15 +120,16 @@ module VagrantPlugins def converter(hash, mapper) begin - fields = Hash.new.tap do |f| - hash.each_pair do |k, v| - r = mapper.map(v, to: Google::Protobuf::Any) - f[k] = r - end + entries = hash.map do |k, v| + SDK::Args::HashEntry.new( + key: mapper.map(k, to: Google::Protobuf::Any), + value: mapper.map(v, to: Google::Protobuf::Any), + ) end - SDK::Args::Hash.new(fields: fields) + SDK::Args::Hash.new(entries: entries) rescue => err logger.error { "hash mapping to proto failed: #{err}" } + logger.trace { "#{err}\n#{err.backtrace.join("\n")}" } raise end end @@ -170,11 +171,15 @@ module VagrantPlugins def converter(proto, mapper) begin Hash.new.tap do |result| - proto.fields.each do |k, v| - r = mapper.map(v) - # unwrap any wrapper classes here before assigning - r = r.value if r.is_a?(Type) - result[k.to_sym] = r + proto.entries.each do |entry| + # Convert our key and value to native types + k = mapper.map(entry.key) + v = mapper.map(entry.value) + # If the key or the value is a wrapper type, + # extract the value from it + k = k.value if k.is_a?(Type) + v = v.value if v.is_a?(Type) + result[k] = v end end rescue => err