Kaynağa Gözat

Changes to REsult class

Kenric Nugteren 1 yıl önce
ebeveyn
işleme
4f5dcd227a
2 değiştirilmiş dosya ile 65 ekleme ve 36 silme
  1. 56 26
      InABox.Core/Utils/Result.cs
  2. 9 10
      inabox.wpf/ProgressWindow/Progress.cs

+ 56 - 26
InABox.Core/Utils/Result.cs

@@ -7,25 +7,21 @@ namespace InABox.Core
 {
     public static class Result
     {
-        public static Result<E> Ok<E>()
+        public static OkResult Ok()
         {
-            return new Result<E>();
+            return new OkResult();
         }
-        public static Result<E> Error<E>(E error)
+        public static ErrorResult<E> Error<E>(E error)
         {
-            return new Result<E>(error);
+            return new ErrorResult<E>(error);
         }
 
-        public static Result<T, E> Ok<T, E>(T value)
-        {
-            return new Result<T, E>(value);
-        }
-        public static Result<T, E> Error<T, E>(E error)
+        public static OkResult<T> Ok<T>(T value)
         {
-            return new Result<T, E>(error);
+            return new OkResult<T>(value);
         }
 
-        public static Result<E> Flatten<E>(this Result<Result<E>, E> result)
+        public static Result<T, E> Flatten<T, E>(this Result<Result<T, E>, E> result)
         {
             if(result.Get(out var inner, out var error))
             {
@@ -36,16 +32,29 @@ namespace InABox.Core
                 return Result.Error(error);
             }
         }
-        public static Result<T, E> Flatten<T, E>(this Result<Result<T, E>, E> result)
+    }
+
+    public class OkResult
+    {
+    }
+
+    public class OkResult<T>
+    {
+        public T Value;
+
+        public OkResult(T value)
         {
-            if(result.Get(out var inner, out var error))
-            {
-                return inner;
-            }
-            else
-            {
-                return Result.Error<T, E>(error);
-            }
+            Value = value;
+        }
+    }
+
+    public class ErrorResult<E>
+    {
+        public E Error;
+
+        public ErrorResult(E error)
+        {
+            Error = error;
         }
     }
 
@@ -62,6 +71,7 @@ namespace InABox.Core
 
         public Result()
         {
+            _error = default;
             _status = Status.Ok;
         }
         public Result(E error)
@@ -70,6 +80,15 @@ namespace InABox.Core
             _status = Status.Error;
         }
 
+        public static implicit operator Result<E>(OkResult r)
+        {
+            return new Result<E>();
+        }
+        public static implicit operator Result<E>(ErrorResult<E> r)
+        {
+            return new Result<E>(r.Error);
+        }
+
         public bool Get([NotNullWhen(false)][MaybeNull] out E error)
         {
             error = _error;
@@ -80,11 +99,11 @@ namespace InABox.Core
         {
             if(_status == Status.Ok)
             {
-                return Result.Ok<U, E>(mapFunc());
+                return Result.Ok(mapFunc());
             }
             else
             {
-                return Result.Error<U, E>(_error);
+                return Result.Error(_error);
             }
         }
 
@@ -93,11 +112,11 @@ namespace InABox.Core
             if(_status == Status.Ok)
             {
                 mapFunc();
-                return Result.Ok<E>();
+                return Result.Ok();
             }
             else
             {
-                return Result.Error<E>(_error);
+                return Result.Error(_error);
             }
         }
     }
@@ -114,6 +133,8 @@ namespace InABox.Core
         private E _error;
         private Status _status;
 
+        public bool IsOK => _status == Status.Ok;
+
         public Result(T value)
         {
             _value = value;
@@ -127,6 +148,15 @@ namespace InABox.Core
             _status = Status.Error;
         }
 
+        public static implicit operator Result<T, E>(OkResult<T> r)
+        {
+            return new Result<T, E>(r.Value);
+        }
+        public static implicit operator Result<T, E>(ErrorResult<E> r)
+        {
+            return new Result<T, E>(r.Error);
+        }
+
         public bool Get([NotNullWhen(true)][MaybeNull] out T value, [NotNullWhen(false)][MaybeNull] out E error)
         {
             value = _value;
@@ -138,11 +168,11 @@ namespace InABox.Core
         {
             if(_status == Status.Ok)
             {
-                return Result.Ok<U, E>(mapFunc(_value));
+                return Result.Ok(mapFunc(_value));
             }
             else
             {
-                return Result.Error<U, E>(_error);
+                return Result.Error(_error);
             }
         }
     }

+ 9 - 10
inabox.wpf/ProgressWindow/Progress.cs

@@ -1,9 +1,9 @@
-using System;
+using InABox.Core;
+using System;
 using System.ComponentModel;
 using System.Linq;
 using System.Threading;
 using System.Windows.Media.Imaging;
-using FluentResults;
 
 namespace InABox.WPF
 {
@@ -42,7 +42,7 @@ namespace InABox.WPF
                 {
                     foreach (var section in sections)
                     {
-                        progress.Progress.Content = section.Message;
+                        progress.Message = section.Message;
                         section.Action();
                     }
 
@@ -91,16 +91,15 @@ namespace InABox.WPF
             return !cancellationTokenSource.IsCancellationRequested;
         }
 
-        public static Result<T> ShowModal<T>(String message, Func<IProgress<string>, Result<T>> work)
+        public static Result<T, string> ShowModal<T>(String message, Func<IProgress<string>, Result<T, string>> work)
         {
-            Result<T> result = Result.Fail<T>("Incomplete");
-            Exception? exception = null;
+            Result<T, string> result = Result.Error("Incomplete");
 
             var progress = new ProgressForm
             {
                 DisplayImage = DisplayImage
             };
-            progress.Progress.Content = message;
+            progress.Message = message;
             progress.Loaded += (_, args) =>
             {
                 var worker = new BackgroundWorker();
@@ -119,7 +118,7 @@ namespace InABox.WPF
                     }
                     catch (Exception ex)
                     {
-                        result = Result.Fail<T>(ex.Message);
+                        result = Result.Error(ex.Message);
                     }
                 };
                 worker.RunWorkerCompleted +=
@@ -139,11 +138,11 @@ namespace InABox.WPF
             {
                 DisplayImage = DisplayImage
             };
-            progress.Progress.Content = message;
+            progress.Message = message;
             progress.Loaded += (_, args) =>
             {
                 var worker = new BackgroundWorker();
-                var update = new Progress<string>(data => progress.Progress.Content = data);
+                var update = new Progress<string>(data => progress.Message = data);
 
                 progress.OnCancelled += () =>
                 {