namespace Fab; public class Fabricator { public Fabricator(FabricatorOptions options) { System.Console.WriteLine("Command: "+ options.Command); System.Console.WriteLine("Number: "+ options.Number); System.Console.Write("Data:\n\t"); foreach (var datatype in options.Data) { System.Console.Write(datatype+" "); } System.Console.WriteLine(); System.Console.WriteLine("File Name: "+ options.FileName); System.Console.WriteLine("File Format: "+ options.FileFormat); System.Console.Write("Headers:\n\t"); foreach (var header in options.Headers) { System.Console.Write(header+" "); } System.Console.WriteLine(); System.Console.WriteLine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)); } } public class FabricatorOptions { public int Number { get; set; } = 1; public string Command { get; set; } = ""; public string FileFormat { get; set; } = "stdout"; public string FileName { get; set; } = ""; public string[] Headers { get; set; } = []; public string[] Data { get; set; } = []; private readonly string[] AcceptedCommands = { "gen" }; public FabricatorOptions(string Command, Dictionary options, string data) { if(!AcceptedCommands.Contains(Command)){ //TODO(Eero): Print help page instead. throw new Exception($"Invalid command: \"{Command}\"."); } this.Command = Command; ParseOptions(options); Data = ParseData(data); if(Headers.Length == 0) ParseDefaultHeaders(); } private void ParseDefaultHeaders() { List headerList = new List(); foreach (var dataType in Data) { switch (dataType) { case "name": headerList.Add("Name"); break; case "phone": headerList.Add("PhoneNumber"); break; case "address": headerList.Add("Address"); break; default: throw new Exception($"Invalid data type for data \"{dataType}\""); } } Headers = headerList.ToArray(); } private string[] ParseData(string data) { //TODO(Eero): Parse by supported data type return data.Split(":").ToArray(); } private void ParseOptions(Dictionary options) { foreach (var (key, value) in options) { switch (key) { case "-n": Number = int.Parse(value); break; case "-f": FileFormat = value.ToLower(); break; case "-o": FileName = value.Trim(); break; case "-h": Headers = value.Split(":").ToArray(); break; default: throw new Exception($"Invalid option \"{key}\"."); } } } }