1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-21 17:28:00 +02:00
Beef/IDE/src/util/VerSpec.bf

125 lines
2.2 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using Beefy.utils;
using IDE;
using Beefy;
namespace IDE.Util
{
enum VerSpec
{
case SemVer(SemVer ver);
case Path(String path);
case Git(String url);
}
class VerSpecRecord
{
public VerSpec mVerSpec;
public Object mVerObject;
public ~this()
{
/*switch (mVerSpec)
{
case .SemVer(let ver): delete ver;
case .Path(let path): delete path;
case .Git(let url): delete url;
}*/
delete mVerObject;
}
public void SetPath(StringView path)
{
delete mVerObject;
String pathStr = new String(path);
mVerObject = pathStr;
mVerSpec = .Path(pathStr);
}
public void SetSemVer(StringView ver)
{
delete mVerObject;
String pathStr = new String(ver);
SemVer semVer = new SemVer();
semVer.mVersion = pathStr;
mVerObject = semVer;
mVerSpec = .SemVer(semVer);
}
public Result<void> Parse(StructuredData data)
{
if (data.IsObject)
{
for (var valName in data.Enumerate())
{
if (valName == "Path")
{
var pathStr = new String();
data.GetCurString(pathStr);
mVerObject = pathStr;
mVerSpec = .Path(pathStr);
}
else if (valName == "Git")
{
var pathStr = new String();
data.GetCurString(pathStr);
mVerObject = pathStr;
mVerSpec = .Git(pathStr);
}
else if (valName == "Ver")
{
var pathStr = new String();
data.GetCurString(pathStr);
SemVer semVer = new SemVer();
mVerObject = semVer;
semVer.mVersion = pathStr;
mVerSpec = .SemVer(semVer);
}
else
{
//gApp.Fail("Invalid ver path");
return .Err;
}
}
}
else
{
let verString = scope String();
data.GetCurString(verString);
let semVer = new SemVer();
mVerSpec = .SemVer(semVer);
mVerObject = semVer;
Try!(semVer.Parse(verString));
}
return .Ok;
}
public void Serialize(String name, StructuredData data)
{
switch (mVerSpec)
{
case .Git(var path):
using (data.CreateObject(name))
{
data.Add("Git", path);
}
case .SemVer(var ver):
data.Add(name, ver.mVersion);
case .Path(var path):
using (data.CreateObject(name))
{
data.Add("Path", path);
}
}
}
}
}