105 lines
3.2 KiB
C#
105 lines
3.2 KiB
C#
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<string, string> 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<string> headerList = new List<string>();
|
|
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<string>();
|
|
}
|
|
|
|
private void ParseOptions(Dictionary<string, string> 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<string>();
|
|
break;
|
|
default:
|
|
throw new Exception($"Invalid option \"{key}\".");
|
|
}
|
|
}
|
|
}
|
|
} |