func()

in cmds/contest-generator/config.go [105:143]


func (c *Config) Validate() error {
	if err := c.TargetManagers.Validate(); err != nil {
		return fmt.Errorf("target managers validation failed: %w", err)
	}
	if err := c.TestFetchers.Validate(); err != nil {
		return fmt.Errorf("test fetchers validation failed: %w", err)
	}
	if err := c.TestSteps.Validate(); err != nil {
		return fmt.Errorf("test steps validation failed: %w", err)
	}
	if err := c.Reporters.Validate(); err != nil {
		return fmt.Errorf("reporters validation failed: %w", err)
	}
	// ensure that there are no duplicate package names
	// map of alias => plugintypes
	plugins := make(map[string][]string)
	for _, e := range c.TargetManagers {
		plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "targetmanagers")
	}
	for _, e := range c.TestFetchers {
		plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "testfetchers")
	}
	for _, e := range c.TestSteps {
		plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "teststeps")
	}
	for _, e := range c.Reporters {
		plugins[e.ToAlias()] = append(plugins[e.ToAlias()], "reporters")
	}
	var duplicates []string
	for name, ptypes := range plugins {
		if len(ptypes) > 1 {
			duplicates = append(duplicates, name)
		}
	}
	if len(duplicates) > 0 {
		return fmt.Errorf("found %d duplicate plugin(s): %v", len(duplicates), duplicates)
	}
	return nil
}