Result<T>
using System;
using System.Runtime.CompilerServices;
namespace NUnit.Framework
{
[System.Runtime.CompilerServices.NullableContext(2)]
[System.Runtime.CompilerServices.Nullable(0)]
internal struct Result<T>
{
private readonly T _value;
private readonly string _errorMessage;
public T Value {
get {
if (_errorMessage != null)
throw new InvalidOperationException("The result is not success.");
return _value;
}
}
private Result(T value, string errorMessage)
{
_value = value;
_errorMessage = errorMessage;
}
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
public static Result<T> Success(T value)
{
return new Result<T>(value, null);
}
[System.Runtime.CompilerServices.NullableContext(1)]
[return: System.Runtime.CompilerServices.Nullable(new byte[] {
0,
1
})]
public static Result<T> Error(string message)
{
if (string.IsNullOrEmpty(message))
throw new ArgumentException("Error message must be specified.", "message");
return new Result<T>(default(T), message);
}
public bool IsSuccess(out T value)
{
value = _value;
return _errorMessage == null;
}
public bool IsError(out string message)
{
message = _errorMessage;
return _errorMessage != null;
}
public static implicit operator Result<T>(T value)
{
return Success(value);
}
public static implicit operator Result<T>(string value)
{
return Error(value);
}
}
}