// Copyright 2019 The Fuchsia 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 testsharder

import (
	"fmt"
)

// Mode is a mode in which the testsharder can be run.
type Mode int

const (
	// Normal is the default mode in which all tests are sharded, except
	// those excluded by differing tags.
	Normal Mode = iota

	// Restricted is the mode in which auth-needing tests (i.e., those that
	// specify service accounts) are ignored. This mode is useful for
	// running untrusted code.
	Restricted
)

// String implements flag.Var.String.
func (m *Mode) String() string {
	switch *m {
	case Normal:
		return "normal"
	case Restricted:
		return "restricted"
	}
	return ""
}

// Set implements flag.Var.Set.
func (m *Mode) Set(s string) error {
	switch s {
	case "normal":
		*m = Normal
	case "restricted":
		*m = Restricted
	default:
		return fmt.Errorf("%s is not a valid mode", s)
	}
	return nil
}
