80 lines
2.1 KiB
Ruby
80 lines
2.1 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require "pp"
|
|
require "google/protobuf/well_known_types"
|
|
require "google/protobuf/wrappers_pb"
|
|
|
|
module VagrantPlugins
|
|
module CommandServe
|
|
class Mappers
|
|
class DirectFuncSpec < Mapper
|
|
def initialize
|
|
inputs = [].tap do |i|
|
|
i << Input.new(type: SDK::FuncSpec::Value) { |arg|
|
|
arg.type == "hashicorp.vagrant.sdk.Args.Direct" &&
|
|
!arg&.value&.value.nil?
|
|
}
|
|
end
|
|
super(inputs: inputs, output: SDK::Args::Direct, func: method(:converter))
|
|
end
|
|
|
|
def converter(proto)
|
|
SDK::Args::Direct.decode(proto.value.value)
|
|
end
|
|
end
|
|
|
|
class DirectFromProto < Mapper
|
|
include Util::HasLogger
|
|
|
|
def initialize
|
|
super(
|
|
inputs: [
|
|
Input.new(type: SDK::Args::Direct),
|
|
Input.new(type: Mappers),
|
|
],
|
|
output: Type::Direct,
|
|
func: method(:converter),
|
|
)
|
|
end
|
|
|
|
def converter(direct, mappers)
|
|
args = direct.arguments.map do |v|
|
|
begin
|
|
mappers.map(v)
|
|
rescue => err
|
|
logger.debug { "Failed to map value #{v} - #{err}\n#{err.backtrace.join("\n")}" }
|
|
raise
|
|
end
|
|
end
|
|
Type::Direct.new(arguments: args)
|
|
end
|
|
end
|
|
|
|
class DirectToProto < Mapper
|
|
include Util::HasLogger
|
|
|
|
def initialize
|
|
inputs = [].tap do |i|
|
|
i << Input.new(type: Type::Direct)
|
|
i << Input.new(type: Mappers)
|
|
end
|
|
super(inputs: inputs, output: SDK::Args::Direct, func: method(:converter))
|
|
end
|
|
|
|
def converter(d, mappers)
|
|
args = d.args.map do |a|
|
|
begin
|
|
mappers.map(a, to: Google::Protobuf::Any)
|
|
rescue => err
|
|
logger.debug { "Failed to map value #{a} - #{err}\n#{err.backtrace.join("\n")}" }
|
|
raise
|
|
end
|
|
end
|
|
SDK::Args::Direct.new(arguments: args)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|