1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-17 07:44:09 +02:00

Updated mintest Result

This commit is contained in:
Brian Fiete 2020-08-25 09:07:07 -07:00
parent fb73967519
commit 78cdfd5d24

View file

@ -2,9 +2,10 @@ namespace System
{ {
enum Result<T> : IDisposable enum Result<T> : IDisposable
{ {
case Ok(T _val); case Ok(T val);
case Err(void _err); case Err(void err);
[Inline]
T Unwrap() T Unwrap()
{ {
switch (this) switch (this)
@ -17,6 +18,14 @@ namespace System
} }
} }
public T Value
{
get
{
return Unwrap();
}
}
public static implicit operator Result<T>(T value) public static implicit operator Result<T>(T value)
{ {
return .Ok(value); return .Ok(value);
@ -66,19 +75,19 @@ namespace System
} }
[SkipCall] [SkipCall]
public static void NoDispose<TVal>() static void NoDispose<TVal>()
{ {
} }
public static void NoDispose<TVal>() where TVal : IDisposable static void NoDispose<TVal>() where TVal : IDisposable
{ {
Internal.FatalError("Result must be disposed", 1); Internal.FatalError("Result must be disposed", 1);
} }
public void ReturnValueDiscarded() public void ReturnValueDiscarded()
{ {
if (this case .Err) if (this case .Err(let err))
Internal.FatalError("Unhandled error in result", 1); Internal.FatalError("Unhandled error in result", 1);
NoDispose<T>(); NoDispose<T>();
} }
@ -93,18 +102,6 @@ namespace System
} }
} }
/*extension Result<T> where T : class
{
public static T operator?(Self val)
{
switch (val)
{
case .Ok(let inner): return inner;
case .Err: return default;
}
}
}*/
enum Result<T, TErr> : IDisposable enum Result<T, TErr> : IDisposable
{ {
case Ok(T val); case Ok(T val);
@ -117,15 +114,19 @@ namespace System
case .Ok(var val): return val; case .Ok(var val): return val;
case .Err(var err): case .Err(var err):
{ {
String errStr = scope String(); Internal.FatalError("Unhandled error in result");
err.ToString(errStr);
String showErr = scope String();
showErr.ConcatInto("Unhandled error in result:\n ", errStr);
Internal.FatalError(showErr, 2);
} }
} }
} }
public T Value
{
get
{
return Unwrap();
}
}
public static implicit operator Result<T, TErr>(T value) public static implicit operator Result<T, TErr>(T value)
{ {
return .Ok(value); return .Ok(value);
@ -175,12 +176,12 @@ namespace System
} }
[SkipCall] [SkipCall]
public static void NoDispose<TVal>() static void NoDispose<TVal>()
{ {
} }
public static void NoDispose<TVal>() where TVal : IDisposable static void NoDispose<TVal>() where TVal : IDisposable
{ {
Internal.FatalError("Result must be disposed", 1); Internal.FatalError("Result must be disposed", 1);
} }
@ -189,13 +190,10 @@ namespace System
{ {
if (this case .Err(var err)) if (this case .Err(var err))
{ {
String errStr = scope String(); Internal.FatalError("Unhandled error in result");
err.ToString(errStr);
String showErr = scope String();
showErr.ConcatInto("Unhandled error in result:\n ", errStr);
Internal.FatalError(showErr, 1);
} }
NoDispose<T>(); NoDispose<T>();
NoDispose<TErr>();
} }
} }