82 lines
2.3 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
module VagrantPlugins
module CommandServe
class Mappers
class EnvironmentFromProject < Mapper
include Util::HasLogger
def initialize
inputs = [
Input.new(type: Client::Project),
Input.new(type: Vagrant::UI::Remote),
Input.new(type: Util::Cacher)
]
super(inputs: inputs, output: Vagrant::Environment, func: method(:converter))
end
def converter(project, ui, cacher)
cid = project.resource_id
return cacher.get(cid) if cacher.registered?(cid)
logger.warn { "cache miss for environment with project resource id #{cid} cache=#{cacher} !!" }
env = Vagrant::Environment.new(ui: ui, client: project)
cacher.register(cid, env)
env
end
end
class EnvironmentToProject < Mapper
def initialize
super(
inputs: [Input.new(type: Vagrant::Environment)],
output: Client::Project,
func: method(:converter),
)
end
def converter(env)
env.client
end
end
class EnvironmentToProto < Mapper
def initialize
super(
inputs: [Input.new(type: Vagrant::Environment)],
output: SDK::Args::Project,
func: method(:converter),
)
end
def converter(env)
env.client.to_proto
end
end
class EnvironmentFromProjectNoUI < Mapper
include Util::HasLogger
def initialize
inputs = [
Input.new(type: Client::Project),
Input.new(type: Util::Cacher),
Input.new(type: Mappers)
]
super(inputs: inputs, output: Vagrant::Environment, func: method(:converter))
end
def converter(project, cacher, mapper)
cid = project.resource_id
return cacher.get(cid) if cacher.registered?(cid)
logger.warn { "cache miss for environment with project resource id #{cid} cache=#{cacher}" }
ui = mapper.map(project, to: Vagrant::UI::Remote)
env = Vagrant::Environment.new(client: project, ui: ui)
cacher.register(cid, env)
env
end
end
end
end
end