17 MapValues(IEnumerable<SpecificationProperty> propertyTuples,
18 IEnumerable<KeyValuePair<
string, IEnumerable<string>>> options,
19 Func<IEnumerable<string>, Type,
bool,
bool,
Maybe<object>> converter,
20 StringComparer comparer)
22 IEnumerable<Tuple<SpecificationProperty, Maybe<Error>>> sequencesAndErrors = propertyTuples
35 IEnumerable<KeyValuePair<string, IEnumerable<string>>> matches =
36 matched.GetValueOrDefault(Enumerable
37 .Empty<KeyValuePair<
string, IEnumerable<string>>>()
39 List<string> values =
new List<string>();
41 foreach (KeyValuePair<
string, IEnumerable<string>> kvp
in matches)
43 foreach (
string value
in kvp.Value)
49 bool isFlag = pt.Specification.Tag == SpecificationType.Option &&
52 return converter(values,
53 isFlag ? typeof(
bool) : pt.Property.PropertyType,
54 pt.Specification.TargetType !=
TargetType.Sequence,
57 .Select(value => Tuple.Create(pt.WithValue(
Maybe.Just(value)),
65 .FromOptionSpecification()
72 return Tuple.Create(pt,
Maybe.Nothing<
Error>());
77 return Result.Succeed(sequencesAndErrors.Select(se => se.Item1),
78 sequencesAndErrors.Select(se => se.Item2)
80 .Select(se => se.Value)