vagrant/plugins/commands/serve/client/capability_platform.rb

65 lines
1.9 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
require "google/protobuf/well_known_types"
module VagrantPlugins
module CommandServe
class Client
module CapabilityPlatform
# Generate callback and spec for required arguments
#
# @return [SDK::FuncSpec, Proc]
def has_capability_func
spec = client.has_capability_spec(Empty.new)
cb = proc do |args|
client.has_capability(args).has_capability
end
[spec, cb]
end
# @param [Symbol] cap_name Capability name
# @return [Boolean]
def has_capability?(cap_name)
run_func(
SDK::Args::NamedCapability.new(
capability: cap_name.to_s
)
)
end
# Generate callback and spec for required arguments
#
# @param cap_name [String] Name of capability
# @return [SDK::FuncSpec, Proc]
def capability_func(cap_name)
spec = client.capability_spec(
SDK::Platform::Capability::NamedRequest.new(
name: cap_name,
)
)
cb = lambda do |name, args|
result = client.capability(
SDK::Platform::Capability::NamedRequest.new(
name: name,
func_args: args,
)
)
return nil if result.nil? || result.result.nil?
mapper.map(SDK::Args::Direct.new(arguments: [result.result])).arguments.first
end
[spec, cb]
end
# @param [Symbol] cap_name Name of the capability
def capability(cap_name, *args)
logger.debug("executing capability #{cap_name}")
spec, cb = capability_func(cap_name)
cb.call(cap_name,
generate_funcspec_args(spec,
Type::Direct.new(value: args), *args))
end
end
end
end
end