diff --git a/src/Error.cs b/src/Error.cs new file mode 100644 index 0000000..85a660f --- /dev/null +++ b/src/Error.cs @@ -0,0 +1,24 @@ +using System; + +namespace UnmanagedResult; + +public readonly struct Error : IError + where TEnum : unmanaged, Enum +{ + public TEnum Code { get; } + + public Error(TEnum code) + { + Code = code; + } + + public static implicit operator Error(TEnum code) + { + return new(code); + } + + public static implicit operator TEnum(Error error) + { + return error.Code; + } +} \ No newline at end of file diff --git a/src/IResult.cs b/src/IResult.cs index e81e1d5..25b7d68 100644 --- a/src/IResult.cs +++ b/src/IResult.cs @@ -1,9 +1,8 @@ namespace UnmanagedResult; -public interface IResult +public interface IResult where TValue : unmanaged where TError : unmanaged, IError { - public TValue Value { get; } - public TError Error { get; } + } diff --git a/src/Result.cs b/src/Result.cs new file mode 100644 index 0000000..0a09b62 --- /dev/null +++ b/src/Result.cs @@ -0,0 +1,12 @@ +using System; + +namespace UnmanagedResult; + +public struct Result : IResult> + where TValue : unmanaged + where TEnum : unmanaged, Enum +{ + public TValue Value => throw new System.NotImplementedException(); + + public Error Error => default; +} \ No newline at end of file diff --git a/src/UnmanagedResult.csproj b/src/UnmanagedResult.csproj index 73b6281..85c930d 100644 --- a/src/UnmanagedResult.csproj +++ b/src/UnmanagedResult.csproj @@ -4,6 +4,7 @@ net10.0 disable enable + true