From af13724f560ccf1eba10c8462b42cd0a6d2e1c8e Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Fri, 29 Oct 2021 09:03:43 -0700 Subject: [PATCH] Adjust wrapper type generated mappers --- plugins/commands/serve/mappers/wrappers.rb | 30 ++++++++++++++++------ 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/plugins/commands/serve/mappers/wrappers.rb b/plugins/commands/serve/mappers/wrappers.rb index eda89acfd..5af37df8e 100644 --- a/plugins/commands/serve/mappers/wrappers.rb +++ b/plugins/commands/serve/mappers/wrappers.rb @@ -6,30 +6,44 @@ module VagrantPlugins Google::Protobuf.constants.grep(/.Value$/).each do |name| value = Google::Protobuf.const_get(name) next if !value.is_a?(Class) + if value.instance_methods.include?(:value) + type = value.new.value.class + elsif value.instance_methods.include?(:values) + type = Array + elsif value.instance_methods.include?(:fields) + type = Hash + end type = value.new.respond_to?(:value) ? value.new.value.class : value.new.values.class - klass = Class.new(Mapper).class_eval " + n = type.name.to_s.split("::").last + Class.new(Mapper).class_eval " def initialize super( - inputs: [Input.new(type:#{value.name})], + inputs: [Input.new(type: #{value.name})], output: #{type.name}, func: method(:converter) ) end def self.name - \"#{name}\" + '#{name}To#{n}' + end + + def to_s + '<#{name}To#{n}:' + object_id.to_s + '>' end def converter(proto) - proto.value + if proto.respond_to?(:value) + proto.value + elsif proto.respond_to?(:values) + proto.values.to_a + else + proto.fields.to_h + end end " - self.const_set( - name, - klass - ) end end end