1package signals
2
3import (
4	"fmt"
5	"os"
6	"sort"
7	"strings"
8)
9
10// SIGNIL is the nil signal.
11var SIGNIL os.Signal = new(NilSignal)
12
13// ValidSignals is the list of all valid signals. This is built at runtime
14// because it is OS-dependent.
15var ValidSignals []string
16
17func init() {
18	valid := make([]string, 0, len(SignalLookup))
19	for k := range SignalLookup {
20		valid = append(valid, k)
21	}
22	sort.Strings(valid)
23	ValidSignals = valid
24}
25
26// Parse parses the given string as a signal. If the signal is not found,
27// an error is returned.
28func Parse(s string) (os.Signal, error) {
29	sig, ok := SignalLookup[strings.ToUpper(s)]
30	if !ok {
31		return nil, fmt.Errorf("invalid signal %q - valid signals are %q",
32			s, ValidSignals)
33	}
34	return sig, nil
35}
36