Example #1
0
        public ParseResult <object> Parse(IEnumerable <Type> verbTypes, string input)
        {
            Dictionary <string, Type> verbs = OptionsClassProcessor.GetVerbs(verbTypes);

            var tokenizer = new Tokenizer(input);
            var token     = tokenizer.NextToken;

            if (token.Kind != TokenKind.Value)
            {
                DisplayHelp(verbs, null);
                return(ParseResult <object> .WithError("Could not find an expected verb"));
            }

            if (token.Value == "help")
            {
                DisplayHelp(verbs, tokenizer);
                // The user intentionally asked for help, and this is not an error. The caller has to
                // be aware of the option that they are getting a null value in that case.
                return(ParseResult <object> .WithValue(null));
            }

            Type type;

            if (!verbs.TryGetValue(token.Value, out type))
            {
                DisplayHelp(verbs, null);
                return(ParseResult <object> .WithError("Could not find a match for verb '" + token.Value + "'"));
            }

            var result = Parse(type, tokenizer.RestOfInput);

            if (!result.Success)
            {
                _helpWriter.Write(Usage(type));
            }
            return(result);
        }