fabricator/Fabricator.cs
Eero Holmala 7a4f707f39 Added basic argument parser. Started some class
stubs for reading and storing data. Also added README.
2024-01-23 13:32:30 +02:00

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}\".");
}
}
}
}