Exemplo n.º 1
0
        private void InitializeMaps(List <OptionBase <TRunInfo> > options)
        {
            foreach (OptionBase <TRunInfo> option in options)
            {
                addProcessInfo(option);

                if (option.Type == typeof(bool))
                {
                    addToBoolMaps(option);
                }
            }

            // local functions
            void addProcessInfo(OptionBase <TRunInfo> option)
            {
                var(fullKey, shortKey) = OptionTokenizer.TokenizeKeyConfiguration(option.Key);
                OptionProcessInfo <TRunInfo> processInfo = option.GetProcessInfo();

                _fullOptionInfo.Add(fullKey, processInfo);

                if (shortKey != null)
                {
                    _shortOptionInfo.Add(shortKey.Value, processInfo);
                }
            }

            void addToBoolMaps(OptionBase <TRunInfo> option)
            {
                var(fullKey, shortKey) = OptionTokenizer.TokenizeKeyConfiguration(option.Key);

                _fullBoolTypeKeys.Add(fullKey);

                if (shortKey != null)
                {
                    _shortBoolTypeKeys.Add(shortKey.Value);
                }
            }
        }
Exemplo n.º 2
0
        private ProcessStageResult ProcessShort(char key, string valueString, ProcessContext <TRunInfo> context)
        {
            OptionProcessInfo <TRunInfo> processInfo = context.Options.GetOptionProcessInfo(key);

            object value = GetParsedValue(processInfo.Type, valueString, context, processInfo.OnParseErrorUseMessage);

            if (processInfo.OnParsed != null)
            {
                dynamic convertedType = Convert.ChangeType(value, processInfo.Type);

                dynamic onProcess = processInfo.OnParsed;

                ProcessStageResult onProcessResult = onProcess.Invoke(convertedType);
                if (onProcessResult == ProcessResult.End)
                {
                    return(ProcessResult.End);
                }
            }

            processInfo.Setter(context.RunInfo, value);

            return(ProcessResult.Continue);
        }