static void ParseArgs()

in tools/Elasticurl/Elasticurl.cs [73:207]


        static void ParseArgs(string[] args) 
        {
            try 
            {
                // Convert --arg=value into --arg value
                List<string> expandedArgs = new List<string>();
                foreach (string arg in args) 
                {
                    if (arg.StartsWith("--"))
                    {
                        expandedArgs.AddRange(arg.Split('='));
                    }
                    else
                    {
                        expandedArgs.Add(arg);
                    }
                }
                args = expandedArgs.ToArray();
                string uri = "";
                for (int argIdx = 0; argIdx < args.Length; ++argIdx)
                {
                    string arg = args[argIdx];
                    switch (arg)
                    {
                        case "--cacert":
                            ctx.CACert = NextArg(args, ref argIdx);
                            break;
                        case "--capath":
                            ctx.CAPath = NextArg(args, ref argIdx);
                            break;
                        case "-c":
                        case "--cert":
                            ctx.Certificate = NextArg(args, ref argIdx);
                            break;
                        case "--data":
                        case "-d":
                            string data = NextArg(args, ref argIdx);
                            ctx.PayloadStream = new MemoryStream(Encoding.UTF8.GetBytes(data));
                            break;
                        case "--key":
                            ctx.PrivateKey = NextArg(args, ref argIdx);
                            break;
                        case "--connect-timeout":
                            ctx.ConnectTimeoutMs = uint.Parse(NextArg(args, ref argIdx));
                            break;
                        case "--get":
                        case "-G":
                            ctx.Verb = "GET";
                            break;
                        case "--data-file":
                            string file = NextArg(args, ref argIdx);
                            ctx.PayloadStream = File.OpenRead(file);
                            break;
                        case "--header":
                        case "-H":
                            ctx.Headers.Add(NextArg(args, ref argIdx));
                            break;
                        case "--help":
                        case "-h":
                            ShowHelp();
                            Environment.Exit(0);
                            break;
                        case "--head":
                        case "-I":
                            ctx.Verb = "HEAD";
                            break;
                        case "--include":
                        case "-i":
                            ctx.IncludeHeaders = true;
                            break;
                        case "--insecure":
                        case "-k":
                            ctx.Insecure = true;
                            break;
                        case "--method":
                        case "-M":
                            ctx.Verb = NextArg(args, ref argIdx);
                            break;
                        case "--output":
                        case "-o":
                            ctx.OutputFilename = NextArg(args, ref argIdx);
                            break;
                        case "--post":
                        case "-P":
                            ctx.Verb = "POST";
                            break;
                        case "--trace":
                        case "-t":
                            ctx.TraceFile = NextArg(args, ref argIdx);
                            break;
                        case "--verbose":
                        case "-v":
                            string level = NextArg(args, ref argIdx);
                            bool found = false;
                            foreach (LogLevel value in Enum.GetValues(typeof(LogLevel)))
                            {
                                if (string.Equals(level, value.ToString(), StringComparison.OrdinalIgnoreCase))
                                {
                                    ctx.LogLevel = value;
                                    found = true;
                                    break;
                                }
                            }
                            if (!found)
                            {
                                Console.WriteLine("Invalid log level: {0}", level);
                                ShowHelp();
                                Environment.Exit(-1);
                            }
                            break;
                        default:
                            if (argIdx < args.Length - 1) {
                                ShowHelp();
                                Environment.Exit(0);
                                return;
                            } else {
                                uri = arg;
                            }
                            break;
                    }
                }

                ctx.Uri = new Uri(uri);
            }
            catch (IndexOutOfRangeException)
            {
                ShowHelp();
                Environment.Exit(-1);
            }
            catch (UriFormatException ufe)
            {
                Console.WriteLine("Invalid URI: {0}: {1}", args[args.Length - 1], ufe.Message);
                Environment.Exit(-1);
            }
        }