blob: 79259635f7fa823643a8df99d84915c3667c93a4 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Package swarming implements conversion of Skylab inventory schema to
// Swarming dimensions.
package swarming
import "infra/libs/skylab/inventory"
// Dimensions is the type for Swarming dimensions.
type Dimensions map[string][]string
// Convert converts DUT inventory labels to Swarming dimensions.
func Convert(ls *inventory.SchedulableLabels) Dimensions {
dims := make(Dimensions)
for _, c := range converters {
c(dims, ls)
}
return dims
}
var converters []converter
// converter is the type of functions used for converting Skylab
// inventory labels to Swarming dimensions.
type converter func(Dimensions, *inventory.SchedulableLabels)
// Revert converts Swarming dimensions to DUT inventory labels.
func Revert(d Dimensions) *inventory.SchedulableLabels {
ls := inventory.NewSchedulableLabels()
for _, r := range reverters {
d = r(ls, d)
}
return ls
}
var reverters []reverter
// reverter is the type of functions used for reverting Swarming
// dimensions back to Skylab inventory labels. Each reverter should
// modify the SchedulableLabels for the Swarming dimension it is
// responsible for, and return the Dimensions that it does not handle.
type reverter func(*inventory.SchedulableLabels, Dimensions) Dimensions
// appendDim appends a dimension value for a key.
func appendDim(dim Dimensions, k, v string) {
dim[k] = append(dim[k], v)
}