1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/// The `OpParameter` enumeration is used to represent which defining parameters
/// are valid for a given `Op`eration.
///
/// The individual `Op`eration implementations use these to define the types of
/// the parameters accepted, and whether they are *required* (in which case the
/// provided default value is set to `None`), or *optional* (in which
/// case, a default value of the proper type is provided). The odd man out here
/// is the `Flag` type: Since a flag is a boolean which is true if present and
/// false if not, it does not make much sense to provide a default in this case.
///
/// Any other parameters given should be ignored, but warned about.
///
/// For a given operation, the union of the sets of its required and optional
/// parameters is called the *gamut* of the operation.