// Package modules provides fucntionality to install and sign Linux kernel modules.
package modules

import (
	"fmt"

	"cos.googlesource.com/cos/tools.git/src/pkg/utils"
)

type ModuleParameters map[string][]string

func NewModuleParameters() ModuleParameters {
	return make(map[string][]string)
}

func (i *ModuleParameters) Set(value string) error {
	module, keyValue, found := utils.Cut(value, ".")
	if !found {
		return fmt.Errorf("modules: cannot parse module parameter %s, must be of form module.key=value", value)
	}
	moduleParamKey, moduleParamVal, found := utils.Cut(keyValue, "=")
	if !found || len(moduleParamKey) == 0 || len(moduleParamVal) == 0 {
		return fmt.Errorf("modules: cannot parse module parameter %s, must be of form module.key=value", value)
	}
	(*i)[module] = append((*i)[module], keyValue)
	return nil
}

func (i *ModuleParameters) String() string {
	return ""
}

func (i *ModuleParameters) Type() string {
	return "ModuleParameters"
}
