1package drivers
2
3import "github.com/docker/machine/libmachine/mcnflag"
4
5// CheckDriverOptions implements DriverOptions and is used to validate flag parsing
6type CheckDriverOptions struct {
7	FlagsValues  map[string]interface{}
8	CreateFlags  []mcnflag.Flag
9	InvalidFlags []string
10}
11
12func (o *CheckDriverOptions) String(key string) string {
13	for _, flag := range o.CreateFlags {
14		if flag.String() == key {
15			f, ok := flag.(mcnflag.StringFlag)
16			if !ok {
17				o.InvalidFlags = append(o.InvalidFlags, flag.String())
18			}
19
20			value, present := o.FlagsValues[key].(string)
21			if present {
22				return value
23			}
24			return f.Value
25		}
26	}
27
28	return ""
29}
30
31func (o *CheckDriverOptions) StringSlice(key string) []string {
32	for _, flag := range o.CreateFlags {
33		if flag.String() == key {
34			f, ok := flag.(mcnflag.StringSliceFlag)
35			if !ok {
36				o.InvalidFlags = append(o.InvalidFlags, flag.String())
37			}
38
39			value, present := o.FlagsValues[key].([]string)
40			if present {
41				return value
42			}
43			return f.Value
44		}
45	}
46
47	return nil
48}
49
50func (o *CheckDriverOptions) Int(key string) int {
51	for _, flag := range o.CreateFlags {
52		if flag.String() == key {
53			f, ok := flag.(mcnflag.IntFlag)
54			if !ok {
55				o.InvalidFlags = append(o.InvalidFlags, flag.String())
56			}
57
58			value, present := o.FlagsValues[key].(int)
59			if present {
60				return value
61			}
62			return f.Value
63		}
64	}
65
66	return 0
67}
68
69func (o *CheckDriverOptions) Bool(key string) bool {
70	for _, flag := range o.CreateFlags {
71		if flag.String() == key {
72			_, ok := flag.(mcnflag.BoolFlag)
73			if !ok {
74				o.InvalidFlags = append(o.InvalidFlags, flag.String())
75			}
76		}
77	}
78
79	value, present := o.FlagsValues[key].(bool)
80	if present {
81		return value
82	}
83	return false
84}
85