From bb2551b35f08e652e55d85093b39dbabb8a5405f Mon Sep 17 00:00:00 2001 From: Viktor Stojanovic Date: Tue, 4 Aug 2026 00:49:09 +0200 Subject: [PATCH 1/4] Enable unsafe code in project --- src/UnmanagedResult.csproj | 1 + 1 file changed, 1 insertion(+) 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 From 52c8bf2f81cc19f8753e480b30f3fc6427d504fd Mon Sep 17 00:00:00 2001 From: Viktor Stojanovic Date: Wed, 12 Aug 2026 17:16:16 +0200 Subject: [PATCH 2/4] Add concrete error implementation --- src/Error.cs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/Error.cs 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 From ebcc5ef2162bb955d149746986f6e688ce2998e1 Mon Sep 17 00:00:00 2001 From: Viktor Stojanovic Date: Wed, 12 Aug 2026 17:16:48 +0200 Subject: [PATCH 3/4] Change IResult interface --- src/IResult.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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; } + } From 8416c5fe0c519d41aecb39ad3e1ce9d0f54f1175 Mon Sep 17 00:00:00 2001 From: Viktor Stojanovic Date: Wed, 12 Aug 2026 17:17:08 +0200 Subject: [PATCH 4/4] Add concrete result implementation --- src/Result.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/Result.cs 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